2014-12-14 2 views
3

Есть ли способ выполнить все Java-скрипты на веб-странице точно так же, как браузер, не указав, какую функцию выполнять? В большинстве примеров, которые я видел, они, похоже, указывают, какую часть JavaScript вы хотите выполнить с очищенной веб-страницы. Мне нужно очистить все содержимое и выполнить все Java-скрипты точно так же, как браузер, и получить окончательный код, который мы можем увидеть с помощью проверки google?Веб-скребок с использованием PhantomJS

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

ответ

2

Вы не указали, что будет выполнено со страницы с помощью PhantomJS. Вы открываете страницу с помощью PhantomJS, и весь JavaScript, который выполняется в Chrome или Firefox, также выполняется в PhantomJS. Это полный браузер без «головы».

Есть некоторые отличия. Щелчок по ссылке загрузки не приведет к загрузке. Механизм рендеринга, на котором основан PhantomJS 1.x, составляет почти 4 года, поэтому некоторые страницы просто отображаются по-разному, потому что PhantomJS 1.x может не поддерживать эту функцию. (PhantomJS 2 находится в пути, а теперь в неофициальном статусе «альфа»)

Таким образом, вам нужно выполнить скрипты для каждого взаимодействия, которое пользователь делает на странице с помощью JavaScript или CoffeeScript. Вы не вызываете функции страницы. Вы манипулируете элементами DOM, чтобы имитировать пользователя, взаимодействующего со страницей в браузере. Это необходимо сделать в таком способе raw, потому что API PhantomJS не обеспечивает высокоуровневые пользовательские функции. Если вы хотите их, вы должны посмотреть на CasperJS, который построен на вершине PhantomJS/SlimerJS.

Там вы на самом деле есть такие функции, как click, wait, fetchText и т.д.

+0

Я не уверен, что синтаксис здесь, я сделал 'вар текст = page.evaluate (функция() { возврата document.title +«\ n '+ document.body.innerText; }); 'дает мне текст, но мне нужно с html-тегами, как это было бы видно при проверке. Я не уверен в синтаксисе – Trancey

+0

Если вы хотите, чтобы источник страницы тела с тегами, используйте 'document.body.innerHTML' внутри' page.evaluate' так же, как в любом другом браузере. Если вам нужен полный источник страницы, вы либо обращаетесь к 'page.content' вне контекста страницы, либо получаете' document.documentElement.outerHTML' из 'page.evaluate'. Опять же, PhantomJS - это обычный браузер, поэтому все, что вы вводите в Chrome Developer Tools, вы можете делать внутри 'page.evaluate'. Думаю, вам нужно больше узнать о JavaScript в браузере, чтобы использовать его хорошо. В следующий раз задайте правильный вопрос и сделайте некоторое исследование. –

+0

Я благодарю вас за ваш ответ. Да, я постараюсь найти себя в проблемах, подходящих для этого форума. – Trancey

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