我有一个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
。那么,我该如何处理这个问题?
答案 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,这样您就可以选择自己的方式并在下载时进行迭代。