WebBrowser控件加载两次

本文关键字:两次 控件 加载 WebBrowser | 更新日期: 2023-09-27 18:20:23

好的,伙计们。如果你想把头发拔出来,我有个大问题要问你。这个问题似乎很少见,但它会影响我的程序在几个不同的网站上,这些网站的页面会加载两次内容。

例如:http://www.yelp.com/search?find_desc=donuts&find_loc=78664&ns=1#启动=20

如果你访问这个网站,你会注意到它加载,然后重新加载不同的数据。这是因为URL中有一个参数说start=20,所以结果应该从#20开始,而不是#10。无论设置为什么,Yelp都会加载前10个结果。不知道他们为什么这么做,但这是一个典型的例子,说明了什么绝对破坏了我的程序(

基本上,每当我的程序有一个加载的页面时,它都会将源代码复制到一个字符串中,这样它就可以在其他地方显示它。这其实并不重要——重要的是字符串实际上需要有页面中加载的最后一个东西。每当一个页面加载,然后再次加载时,我不知道如何捕捉它,它会退出while循环,并将源代码复制到名为source的字符串中,从而破坏程序。

下面是一些代码的片段,我用它重现了这个问题。当我试图在一个新程序中使用它时,它会复制第一页结果的源代码,而不是它被更改为的内容。

GetSite = "http://www.yelp.com/search?find_desc=donuts&find_loc=78664&ns=1#start=20";
webBrowser9.Navigate(GetSite);
while (webBrowser9.ReadyState != WebBrowserReadyState.Complete)
{
    p++;
    if (p == 1000000)
    {
        MessageBox.Show("Timeout error. Click OK to skip." + Environment.NewLine + "This could crash the program, but maybe not.");
        label15.Text = "Error Code: Timeout";
        break;
    }
    Application.DoEvents();
}
mshtml.HTMLDocument objHtmlDoc = (mshtml.HTMLDocument)webBrowser9.Document.DomDocument;
Source = objHtmlDoc.documentElement.innerHTML;

WebBrowser控件加载两次

为什么在while循环中等待浏览器完成数据加载?使用DocumentCompleted事件,您可以从中记住文档的URL。