Почему HTML-код, загружаемый WebClient, отличается от страницы Chrome "Просмотр исходного кода"?

Я использую следующий код для загрузки данной веб-страницы.

using (WebClient client = new WebClient())
{
    client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
    using (Stream data = client.OpenRead("https://www.yellowpages.com/south-jordan-ut/plumbers?page=5"))
    using (StreamReader reader = new StreamReader(data))
    {
        string html = reader.ReadToEnd();
    }
}

Это работает но html кажется, содержит только небольшую часть последней страницы. Я понимаю, что этот сайт имеет динамическое содержимое, но когда я просматриваю исходный код в Chrome (выбрав команду " Просмотр исходной страницы"), он, кажется, загружает все.

Если Chrome на самом деле не запускает скрипты, когда вы запускаете просмотр исходного кода страницы, он, похоже, использует какой-то другой прием для получения всего HTML. Кто-нибудь знает, что это за хитрость?

2 ответа

Решение

Так что, если вы читаете HTML, который возвращает webClient, вы можете увидеть некоторый текст:

Мы можем предоставить вам лучший опыт на Yellowpages.com, если вы обновите браузер до последней версии "

Если вы измените свой user-agent к чему-то, что Chrome отправил бы, вы получите результаты, как и ожидалось:

client.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36");

Вероятно, есть вызов ajax или что-то подобное для загрузки данных страницы. Это современная парадигма программного обеспечения, в то время как перед страницей будут все данные, уже имеющиеся для данных. Все остальные говорят о том, что если для загрузки контента есть IS javascript, то веб-клиент не сможет загрузить этот контент. Вот почему вы видите это в своем браузере, а не в веб-клиенте.

Решение состоит в том, чтобы использовать другой инструмент, такой как Selenium, чтобы загрузить страницу в механизм рендеринга, а затем очистить то, что вам нужно.

Другие вопросы по тегам