当用于for循环时,C#WebBrowser坚持导航

时间:2016-08-18 00:19:36

标签: c# logic webbrowser-control

我有一个更改网址的for循环

            for (int i = 1; i < max; i += 50)
            {
                completed = false;
                string currkey = country;
                crawler.Navigate(new Uri("http://www.example.net/func.php?dom=" + currkey + "&key=&start=" + i));
                Console.WriteLine("Navigating to " + "http://www.example.net/func.php?dom=" + currkey + "&key=&start=" + i);
                while (!completed)
                {
                    Application.DoEvents();
                    Thread.Sleep(500);
                }
            }

这是我的文档完成处理程序

        crawler.Refresh();
        Console.WriteLine("Getting universities");
        getUniversities();
        Console.WriteLine("Finished getting universities");
        completed = true;

当我摆脱for循环并使用单个链接时,它似乎正确导航到网站,但是当我使用for循环按顺序加载网站时,似乎Web浏览器在第二次迭代中陷入困境

实施例: currkey =美国

在第一次迭代中,网站链接将是http://www.example.net/func.php?dom=“美国”&amp; key =&amp; start = 1,在下一个网站链接将是http://www.example.net/func.php?dom=“美国”&amp; ;键=安培;开始= 51。尝试加载第二个链接时导航卡住了。

我已经使用了boolean completed注意到当前的迭代已经完成,但它仍然卡住了。

感谢任何形式的帮助

1 个答案:

答案 0 :(得分:0)

您的Thread.Sleep来电阻止WebBrowser继续加载。您应该做的是附加到DocumentCompleted事件,然后加载下一页。请不要在WinForms中使用/ sleep组合 - 您应该使用控件公开的事件。

附上活动:

crawler.DownloadCompleted += CrawlerDocumentCompleted;

事件处理程序:

private void CrawlerDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    //The document has loaded - now do something
}

最后的想法

由于您正在实现爬虫,为什么要使用WinForms中的WebBrowser控件进行导航。当然你感兴趣的是服务器提供的html?或者是使用JavaScript将其他元素加载到DOM中的页面,要求您使用WebBrowser

您可以使用WebClient类和DownloadStringDownloadStringAsync方法。见https://msdn.microsoft.com/en-us/library/fhd1f0sw(v=vs.110).aspx