Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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