如何使WebBrowser等到它完全加载?

我有一个带有Web浏览器控件的C#表单。

我试图循环访问不同的网站。

但是,我无法控制URL地址加载到我的表单Web浏览器元素中。

这是我用于浏览URL地址的function:

public String WebNavigateBrowser(String urlString, WebBrowser wb) { string data = ""; wb.Navigate(urlString); while (wb.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } data = wb.DocumentText; return data; } 

如何使循环等到完全加载?

我的循环是这样的:

 foreach (string urlAddresses in urls) { WebNavigateBrowser(urlAddresses, webBrowser1); // I need to add a code to make webbrowser in Form to wait till it loads } 

将此添加到您的代码中:

 webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted); 

填写此function

 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { //This line is so you only do the event once if (e.Url != webBrowser1.Url) return; //do you actual code } 

经过一段时间的疯狂的IEfunction,我遇到了一些东西,这是判断页面加载完成最准确的方法。

永远不要使用WebBrowserDocumentCompletedEventHandler事件使用WebBrowserProgressChangedEventHandler和下面的一些修改。

//“ie”是我们的Web浏览器对象

 ie.ProgressChanged += new WebBrowserProgressChangedEventHandler(_ie); private void _ie(object sender, WebBrowserProgressChangedEventArgs e) { int max = (int)Math.Max(e.MaximumProgress, e.CurrentProgress); int min = (int)Math.Min(e.MaximumProgress, e.CurrentProgress); if (min.Equals(max)) { //Run your code here when page is actually 100% complete } } 

简单的天才方法,我发现这个问题谷歌搜索“如何睡觉网页浏览器或暂停”

根据MSDN (包含示例源),您可以使用DocumentCompleted事件。 可以在此处找到有关如何区分事件调用的其他非常有用的信息和来源。

你经历的是什么发生在我身上。 readyStete.complete在某些情况下不起作用。 在这里我在document_completed中使用bool来检查状态

  button1_click(){ //go site1 wb.Navigate("site1.com"); //wait for documentCompleted before continue to execute any further waitWebBrowserToComplete(wb); // set some values in html page wb.Document.GetElementById("input1").SetAttribute("Value", "hello"); // then click submit. (submit does navigation) wb.Document.GetElementById("formid").InvokeMember("submit"); // then wait for doc complete waitWebBrowserToComplete(wb); var processedHtml = wb.Document.GetElementsByTagName("HTML")[0].OuterHtml; var rawHtml = wb.DocumentText; } // helpers //instead of checking readState . we get state from DocumentCompleted Event via bool value bool webbrowserDocumentCompleted = false; public static void waitWebBrowserToComplete(WebBrowser wb) { while (!webbrowserDocumentCompleted ) Application.DoEvents(); webbrowserDocumentCompleted = false; } form_load(){ wb.DocumentCompleted += (o, e) => { webbrowserDocumentCompleted = true; }; }