2013-08-08 6 views
0

Веб-страница использует JavaScript для размещения контента на странице, поэтому я получил простой HTML, на этой странице нет данных. Мне нужно что-то еще, что не только прочитает HTML, но и выполнит и применит JavaScript к DOM, а затем вернет результат как текст HTML.Capture Содержимое, сгенерированное JavaScript

Задача такая же, как у this question, но я ищу решение для .NET.

+0

Если вы хотите создать сгенерированный javascript контент, вам понадобится механизм браузера, чтобы на самом деле «запустить» страницу, и затем вы можете изучить полученный DOM. – jfriend00

+0

@ jfriend00 хорошо, это очевидное решение, но я ищу что-то вроде http://lobobrowser.org/cobra/java-html-parser.jsp (решение для аналогичной задачи на Java) –

ответ

1

Я буду удивлен, если вы найдете что-нибудь подобное для .NET. Я бы использовал PhantomJS, чтобы открыть страницу и взаимодействовать с DOM. Это браузер с автономным браузером без браузера и сделает то, что вы хотите с легкостью. См. Пример How to print html source to console with phantomjs.

var page = require('webpage').create(); 
page.open('http://google.com', function() { 
    console.log(page.content); 
    phantom.exit(); 
}); 

Вы должны будете установить PhantomJS, а затем запустить отдельный процесс для запуска сценария, но PhantomJS, вероятно, сделать гораздо лучше, чем все, что вы можете найти, написанные для .NET.

+0

Я посмотрю на него немного глубже, но до сих пор я не могу получить то, что хочу от него. Код в примере по-прежнему возвращает чистый html. Я думаю, что моя проблема с моим конкретным сайтом сложнее, чем я думал. Данные загружаются в запросах AJAX, и PhantomJS этого не делает, конечно. Я думаю, что проще просто взглянуть на звонки AJAX и использовать их напрямую. В любом случае спасибо, PhantomJS - это опрятный инструмент, может быть, он будет полезен для меня в другой раз. –

+0

PhantomJS выполняет все вызовы AJAX и имеет механизмы для проверки этих запросов (см. 'OnResourceRequested'). Но если все данные, которые вас интересуют, находятся в запросе AJAX, было бы лучше сделать то, что вы сказали, и просто сделать этот HTTP-запрос самостоятельно из вашей программы. –

+0

Я предполагаю, что я соглашусь на это как на ответ, поскольку это касается вопроса, и никто в любом случае не предложил лучшего решения. –

Смежные вопросы