c# - 使用 GeckoBrowser 导航到多个 url
问题描述
我正在尝试浏览 url 列表并通过 GeckoBrowser 从网页中获取一些内容。问题是 OnDocumentCompleted 可能在不同的线程上,并且 for 循环没有停止,所以它继续运行
我曾尝试使用多个浏览器进行重构,但没有奏效
private void Window_Loaded(object sender, RoutedEventArgs e)
{
browser.DocumentCompleted += OnDocumentCompleted;
host.Child = browser;
GridWeb.Children.Add(host);
#region Collect All Offers
foreach (var site in sites.OrderBy(x => x.Name))
{
_site = site;
url = site.Url;
browser.Navigate(site.Url);
}
#endregion
}
因此,从上面的代码中,我希望 for 循环在继续之前等待 OnDocumentCompleted 事件。
有任何想法吗?
解决方案
你是对的, DocumentCompleted 事件不会阻止你的 for 循环。而不是使用 for 循环,而是在您编写的 OnDocumentCompleted() 方法中,从站点中获取您想要的数据,然后 Navigate() 到列表中的下一个 url。
此外,如果您只是想下载 Web 数据,浏览器就太过分了,除非网站真的很复杂并使用 javascript 来呈现内容等。如果您只是想从网站获取简单的 html,只需使用 WebClient:
string html = new WebClient().DownloadString("https://www.google.com");
WebClient.DownloadString() 方法确实会阻塞,因此您可以按照上面的意图在 for 循环中使用它。
推荐阅读
- python - 将我自己的 python 模块导入 vs.code
- java - 属性值未使用 spring boot 从 application.properties 解析
- batch-file - 我如何从文本文件中取出一行并使用批处理将其输入网站?
- intellij-idea - 测试框架意外退出 - Cucumber 测试 - Intellij Via Feature 文件
- r - 如何在 R 编程中将特定行值第 1 天、第 2 天等更改为同一行的列值
- python - KivyMD:Android 上未设置 MDDropDownItem;在桌面上工作
- java - 未知目标“jvm-1.11”,Scala 测试构建失败
- webrtc - WebRTC 需要时间将 OutboundRTPVideoStream 帧高度和帧宽度与 RTCInboundRTPVideoStream 匹配
- json - 解析器如何处理 json 数据
- javascript - FormGroup 中的 FormControl 更改为 FormControlName