循环中的C#webBrowser

时间:2014-11-13 15:52:08

标签: c#

我有一个URL列表,我需要分别为每个URL提取HTML。网址:

foo_list = {"expamle.com", "example.net", "example.org"};

我试过的代码:

foreach (string x in foo_list) {
      webBrowser1.Navigate(x);
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
     string html = webBrowser.Document.Body.Parent.OuterHtml;
     // handle the html and save to file...
}

问题是我刚刚获得了列表中最后一个URL(example.org)的html和数据。我知道foreach循环中的Navigate命令运行得太快,所以只有最后一个URL可以等待DocumentCompleted。那么,我该如何处理这个问题?

1 个答案:

答案 0 :(得分:2)

您可以通过保留索引来处理它,等到文档的下载进度完成,然后转到下一个:

int index = -1; //variable in class
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
     string html = webBrowser.Document.Body.Parent.OuterHtml;
     if (index + 1 != foo_list) //So it will stop when there's no links left.
         webBrowser1.Navigate(foo_list[++index]);
}

但是要触发URL的旋转,您需要导航到列表中的第一个URL。要做到这一点,您可以在其他地方执行此操作来触发它:

if (index + 1 != foo_list.Count)
    webBrowser1.Navigate(foo_list[++index]);

但我想提出一个替代方案:WebClient.DownloadString(System.String),您可以直接下载html,这样您就可以选择自己的方式并在下载时进行迭代。