使用 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 循环中使用它。