Запуск скриптов в HtmlAgilityPack

c# html-agility-pack javascript

Вопрос

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

Сначала загружается страница, затем запускается какой-то javascript для извлечения данных, необходимых для заполнения страницы. Меня интересуют эти данные.

Если я получу страницу с помощью HtmlAgilityPack - сценарий не запускается, поэтому я получаю то, что по сути является в основном пустой страницей.

Есть ли способ заставить его запустить скрипт, чтобы я мог получить данные?

Принятый ответ

Вы получаете то, что возвращает сервер, так же, как и веб-браузер. Разумеется, веб-браузер запускает скрипты. Html Agility Pack - это только парсер HTML - он не имеет возможности интерпретировать javascript или привязывать его к внутреннему представлению документа. Если вы хотите запустить скрипт, вам понадобится веб-браузер. Идеальный ответ на вашу проблему был бы полным «безголовым» веб-браузером. Это то, что включает в себя парсер HTML, javascript-интерпретатор и модель, имитирующую DOM-браузер, все работающие вместе. В принципе, это веб-браузер, за исключением без части рендеринга. В настоящее время нет такой вещи, которая полностью работает в среде .NET.

Лучше всего использовать элемент управления WebBrowser и загружать и запускать страницу в Internet Explorer под программным контролем. Это не будет быстрым или красивым, но он будет делать то, что вам нужно.

Также см. Мой ответ на аналогичный вопрос: загрузите DOM и выполните javascript, серверную часть, с .Net, которая обсуждает доступную технологию в .NET для этого. К сожалению, большинство частей существует прямо сейчас, но пока еще недостаточно, или, к сожалению, они не были интегрированы в правильный путь.


Популярные ответы

Вы можете использовать Awesomium для этого, http://www.awesomium.com/ . Он работает достаточно хорошо, но не поддерживает x64 и не является потокобезопасным. Я использую его для сканирования некоторых веб-сайтов 24x7, и он работает нормально, по крайней мере, пару дней подряд, но затем он обычно сбой.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему