Перейдите к нескольким URL с GeckoBrowser - PullRequest
1 голос
/ 08 июня 2019

Я пытаюсь перемещаться по списку 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, прежде чем двигаться дальше.

Есть идеи?

1 Ответ

0 голосов
/ 08 июня 2019

Вы правы, событие DocumentCompleted не заблокирует цикл for. Вместо того чтобы использовать цикл for, внутри написанного вами метода OnDocumentCompleted () возьмите нужные вам данные с сайта, а затем перейдите () к следующему URL-адресу в списке.

Кроме того, если вы просто пытаетесь загрузить веб-данные, браузер излишне убивает, если сайт не очень сложный и не использует javascript для рендеринга и т. Д. Если вы просто пытаетесь получить простой HTML-код с сайта, просто используйте WebClient. :

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

Метод WebClient.DownloadString () блокирует, так что вы можете использовать его в цикле for, как и предполагалось выше.

...