WebBrowser控件加载两次

时间:2014-09-02 10:13:05

标签: c#

好吧,伙计们。如果你想脱掉头发,那我就有一个很大的问题。这个问题似乎非常罕见,但它会影响我的程序在一些页面加载内容两次的不同网站上。

例如:http://www.yelp.com/search?find_desc=donuts&find_loc=78664&ns=1#start=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;

1 个答案:

答案 0 :(得分:2)

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