首页 > 解决方案 > 使用 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 事件。

有任何想法吗?

标签: c#wpfgeckogeckofx

解决方案


你是对的, DocumentCompleted 事件不会阻止你的 for 循环。而不是使用 for 循环,而是在您编写的 OnDocumentCompleted() 方法中,从站点中获取您想要的数据,然后 Navigate() 到列表中的下一个 url。

此外,如果您只是想下载 Web 数据,浏览器就太过分了,除非网站真的很复杂并使用 javascript 来呈现内容等。如果您只是想从网站获取简单的 html,只需使用 WebClient:

string html = new WebClient().DownloadString("https://www.google.com");

WebClient.DownloadString() 方法确实会阻塞,因此您可以按照上面的意图在 for 循环中使用它。


推荐阅读