Phantom не работает с JQuery

0

Я пытаюсь очень простой пример с Phantom + JQuery: я хочу отобразить ярлык Top Questions на странице stackoverflow.com в консоли. Вот мой скрипт testphantom.js:

var page = require('webpage').create();  
page.open('http://stackoverflow.com/', function() {
  page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js", function() {  
    page.evaluate(function() {
      var txt = $('#h-top-questions').text();    
      console.log('TEXT: ' + txt);    
    });
    phantom.exit();
  });
});

Но он ничего не отображает:

>phantomjs testphantom.js
>

Что здесь не так?

Теги:
phantomjs

2 ответа

2
Лучший ответ

Вы регистрируете текст в контексте браузера, но на самом деле вы хотите вызвать console.log в контексте phantomjs:

var page = require('webpage').create();  
page.open('http://stackoverflow.com/', function() {
  page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js", function() {  

    // Get the text value
    var txt = page.evaluate(function() {
      // Browser context
      return jQuery('#h-top-questions').text();   
    });

    // Log the text - phantomJS context
    console.log('TEXT: ' + txt);    

    phantom.exit();
  });
});
0

Ваш код не работает, потому что вы пытаетесь зарегистрировать сообщение с веб-страницы на фантомном объекте, в то время как веб-страница не имеет доступа к фантомному объекту, давайте возьмем пример: вы являетесь разработчиком браузера, а в вашем браузере запущены некоторые веб-страницы представьте, что произойдет, если пользователь, работающий на веб-странице, получит доступ к объекту вашего браузера. Теперь он может контролировать все. Итак, почему выполнение веб-страницы и фантомного объекта изолировано. Примечание: phantomjs - это безгласный браузер.

См. Это: http://phantomjs.org/api/webpage/method/evaluate.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню