Phantom没有使用JQuery

时间:2013-12-17 08:57:40

标签: jquery phantomjs

我正在尝试使用Phantom + JQuery的一个非常简单的示例:我想在控制台中显示 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
>

这里有什么问题?

2 个答案:

答案 0 :(得分:2)

您正在浏览器上下文中记录文本,但实际上您想在phantomjs上下文中调用console.log

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();
  });
});

答案 1 :(得分:0)

您的代码不起作用,因为您尝试在幻像对象的网页上记录消息,而网页无法访问幻像对象,让我们举个例子: 您是浏览器的开发者,并且在您的浏览器上现在正在运行某些网页,想象如果运行网页的用户可以访问您的浏览器对象会发生什么。他现在可以控制每件事。这就是为什么网页和幻像对象的执行是沙盒化的。 注意:phantomjs是一个无头浏览器。

请参阅:http://phantomjs.org/api/webpage/method/evaluate.html