我正在测试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();
});
答案 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();
});