使用 GeckoBrowser 导航到多个 url
Navigate to multiple urls with GeckoBrowser
我正在尝试浏览 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。
此外,如果您只是想下载网络数据,那么浏览器就太过分了,除非该站点真的很复杂并且使用 javascript 来呈现内容等。如果您只是想变得简单 html 来自站点,只需使用 WebClient:
string html = new WebClient().DownloadString("https://www.google.com");
WebClient.DownloadString() 方法确实会阻塞,因此您可以按照上面的预期在 for 循环中使用它。
我正在尝试浏览 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。
此外,如果您只是想下载网络数据,那么浏览器就太过分了,除非该站点真的很复杂并且使用 javascript 来呈现内容等。如果您只是想变得简单 html 来自站点,只需使用 WebClient:
string html = new WebClient().DownloadString("https://www.google.com");
WebClient.DownloadString() 方法确实会阻塞,因此您可以按照上面的预期在 for 循环中使用它。