2011-12-15 62 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(); 
    } 
}