2013-09-16 2 views
5

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

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

Спасибо.

+1

Один из следующих может помочь вам: https://github.com/ariya/phantomjs/wiki/API-Reference-WebPage#wiki-webpage-evaluate или https://github.com/ariya/phantomjs/wiki/API-Reference-WebPage # onconsolemessage –

ответ

15

Что вам нужно понять, так это то, что phantomJS имеет Условия для JavaScript, и эти два не зависят друг от друга. Внутренний - это скрипт документа (который у вас есть в любом браузере). Внешняя контролирует то, что должен делать фантом. Он имитирует пользователя.

Итак, в некотором смысле вам нужно сообщить phantomJS «пользователь открыл консоль JavaScript, набрав ...». evaluate command делает это.

Так, чтобы прочитать значение переменной foo, вы пишете этот код:

var foo = page.evaluate(function() { 
    return document.foo; 
}); 

Примечание: document не является строго необходимым, но это помогает держать две среды друг от друга в голове разработчика ,

+0

Мне удалось заставить это работать, я понятия не имел, что вы можете оценить глобальные переменные на «другой стороне», как это здорово! Все это время я печатал информацию на таблицах на экране, а затем физически оценивал таблицы, чтобы получить информацию, это намного эффективнее! –

3

Ответ Аарона не работает для меня. Возможно, это было верным еще в 2013 году, но теперь (2016), он больше не работает с текущей версией. В примере Аарона foo возвращает обещание, а не значение. console.log(foo) выходы Promise { <pending> }.

Вот что я понял:

page 
    .evaluate(function(){ return window.foo }) 
    .then (function(foo){ console.log "foo = ", foo}); 

Теперь вы действительно получите значение обув.

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