2011-12-15 45 views
0

我试图使用WebBrowser类,但它当然不起作用。WebBrowser - 空DocumentText

我的代码:

WebBrowser browser = new WebBrowser(); 
browser.Navigate("http://www.google.com"); 

while(browser.DocumentText == "") 
{ 
    continue; 
} 
string html = browser.DocumentText; 

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

+2

好了,马上蝙蝠,我几乎可以保证`Navigate`不是一个异步功能,从而'DocumentText`不会导航返回后改变 - 换句话说,这将是一个无限循环时“DocumentText”为空。 – riwalk 2011-12-15 20:34:37

回答

2

web浏览器是不会做的工作,直到当前线程完成它的工作,如果你改变了它是这样的:

 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(); 
      }; 
+0

它的工作原理,但它不会使用JavaScript加载HTML。我可以使用HttpWebRequest,但我需要JavaScript。帮我。 – carck3r 2011-12-15 21:02:02

+0

@ carck3r你是什么意思“需要JavaScript”? javascript可以是内联的,也可以是通过这两种方法加载的,也可以通过单独的Web调用访问。 – McKay 2011-12-15 21:38:27

-1

尝试是这样的

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)); 

必要

2

连接到DocumentCompleted事件while循环内更​​换它,代码如下

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

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

browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted); 

见下面的事件

void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 

     WebBrowser wb = (WebBrowser)sender; 
     string text = wb.DocumentText; 

} 
4

你应该使用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(); 
    } 
} 
相关问题