Как загрузить только HTML с помощью веб-браузера c # - PullRequest
0 голосов
/ 01 апреля 2019

Я использую веб-браузер C # для сбора данных с веб-сайта. Проблема в том, что для получения 250 записей требуется около 20 минут.

То, что я делаю программно, это

1- Получите все годы в раскрывающемся списке

2- каждый год я делаю поиск. и собрать данные из таблицы.

3 - первая ячейка строки является ссылкой (подробности), а остальные ячейки имеют основную информацию.

поэтому я получаю основную информацию, открываю ссылку на подробности в новом браузере и получаю детали

4- цикл через шаг 3

Я сделал тест производительности программы и увидел, что ожидание загрузки документа занимает много времени

если я пропускаю удаление данных со страницы сведений, то для удаления всех данных требуется 1,5 минуты.

Я использую следующий метод, чтобы дождаться завершения документа, прежде чем я начну утилизацию

public async Task WaitPageLoad(int timeOut)
    {
        var pageLoaded = new TaskCompletionSource<bool>();
        var timeElapsed = 0;
        DocumentCompleted += (s, e) =>
        {
            if (ReadyState != WebBrowserReadyState.Complete) return;
            if (pageLoaded.Task.IsCompleted) return; pageLoaded.SetResult(true);
        };

        while (pageLoaded.Task.Status != TaskStatus.RanToCompletion)
        {
            await Task.Delay(10); 
            timeElapsed++;
            if (timeElapsed >= timeOut * 100) pageLoaded.TrySetResult(true);
        }
    }

поэтому мне было интересно, есть ли способ заставить браузер загружать только html, а не изображения или что-то в этом роде ...

любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

В зависимости от того, как вы входите на веб-сайт, вам нужно что-то подобное для работы с WebClient:

WebClient client = new WebClient();
client.Credentials = new NetworkCredential("Username", "Password");
string pageData = client.DownloadString("https://stackoverflow.com/");
0 голосов
/ 01 апреля 2019

Зачем вообще использовать WebBrowser?Это элемент управления, используемый для анализа и отображения контента для пользователей.Это не быстро на любом участке.

Если вам нужны только данные (и вы не собираетесь их отображать), вы можете просто сделать что-то вроде:

//Gets you the HTML for a given URL synchronously
var data = new System.Net.WebClient().DownloadString(url);

Однако вышеприведенное может быть более сложным в использовании в зависимости отсложность страниц, которые вы пытаетесь почистить.

Для более продвинутого просмотра веб-страниц я бы порекомендовал получить либо HtmlAgilityPack, либо IronWebScraper от NuGet.

...