循环中的C#网络浏览器

本文关键字:网络 浏览器 循环 | 更新日期: 2023-09-27 18:30:13

我有一个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。那么,我该如何处理这个问题呢?

循环中的C#网络浏览器

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

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,这样您就可以选择自己的方式并在下载时迭代。