WebBrowser - empty DocumentText

本文关键字:DocumentText empty WebBrowser | 更新日期: 2023-09-27 18:18:04

我正在尝试使用WebBrowser类,但当然它不起作用。

我代码:

WebBrowser browser = new WebBrowser();
browser.Navigate("http://www.google.com");
while(browser.DocumentText == "")
{
    continue;
}
string html = browser.DocumentText;

browser.DocumentText总是""。为什么?

WebBrowser - empty DocumentText

您应该使用DocumentCompleted事件,如果您没有WebForms应用程序,也可能需要ApplicationContext

static class Program
{
    [STAThread]
    static void Main()
    {
        Context ctx = new Context();
        Application.Run(ctx);
        // ctx.Html; -- your html
    }
}
class Context : ApplicationContext
{
    public string Html { get; set; }
    public Context()
    {
        WebBrowser browser = new WebBrowser();
        browser.AllowNavigation = true;
        browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted);
        browser.Navigate("http://www.google.com");
    }
    void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        Html = ((WebBrowser)sender).DocumentText;
        this.ExitThread();
    }
}

如果您将其更改为以下内容,则WebBrowser不会在当前线程完成工作之前完成它的工作:

        WebBrowser browser = new WebBrowser();
        browser.Navigate("http://www.google.com");
        browser.Navigated += (s, e) =>
            {
                var html = browser.DocumentText;
            };

变量将被设置。

但是,正如其他人所提到的,文档完成是一个更好的事件,因为在那个时候,整个文档将完成(适当的名称!)

        WebBrowser browser = new WebBrowser();
        browser.Navigate("http://www.google.com");
        browser.DocumentCompleted += (s, e) =>
            {
                var html = browser.DocumentText;
                html.ToString();
            };

附加到DocumentCompleted事件,代码如下

browser.DocumentCompleted += (s, e) =>
{
    string html = browser.DocumentText;
};

如果你需要DocumentText,你应该处理DocumentCompleted事件

  browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted);

见下面的事件

void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        WebBrowser wb = (WebBrowser)sender;
        string text = wb.DocumentText;
}

试试这样

string url = string.Empty:
string html = "http://www.google.com/";
string url = html;
if (!url.StartsWith("http://") && !url.StartsWith("https://"))
{
   url = "http://" + url;
}
browser.Navigate(new Uri(url)); 

在While循环中替换它