PhantomJS没有返回结果

时间:2013-08-08 00:12:01

标签: phantomjs

我正在测试PhantomJS并尝试返回angel.co上列出的所有初创公司。我决定使用PhantomJS,因为我需要通过单击底部的“Next”来分页。现在这段代码不会返回任何结果。我是PhantomJS的新手,并已阅读所有代码示例,因此我们非常感谢任何指导。

var page = require('webpage').create();
page.open('https://angel.co/startups', function(status) {
if (status !== 'success') {
    console.log('Unable to access network');
} else {
     page.evaluate(function() {
        var list = document.querySelectorAll('div.resume');
        for (var i = 0; i < list.length; i++){
           console.log((i + 1) + ":" + list[i].innerText);
        }
     });
}
phantom.exit();
});

1 个答案:

答案 0 :(得分:17)

默认情况下,在页面上评估的控制台消息不会出现在PhantomJS控制台中。

当您在page.evaluate(...)下执行代码时,该代码正在页面的上下文中执行。所以当你有console.log((i + 1) + ":" + list[i].innerText);时,它会记录在无头浏览器本身,而不是在PhantomJS中。

如果您希望将所有控制台消息传递给PhantomJS本身,请在打开页面后使用以下内容:

page.onConsoleMessage = function (msg) { console.log(msg); };
每当您从页面内打印到控制台时,都会触发

page.onConsoleMessage。通过此回调,您要求PhantomJS将消息回显到其自己的标准输出流。

作为参考,你的最终代码看起来像(这为我成功打印):

var page = require('webpage').create();

page.open('https://angel.co/startups', function(status) {
    page.onConsoleMessage = function (msg) { console.log(msg); };
    if (status !== 'success') {
        console.log('Unable to access network');
    } else {
         page.evaluate(function() {
            var list = document.querySelectorAll('div.resume');
            for (var i = 0; i < list.length; i++){
               console.log((i + 1) + ":" + list[i].innerText);
            }
         });
    }
    phantom.exit();
});