Почему 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, чтобы загрузить страницу в механизм рендеринга, а затем очистить то, что вам нужно.