page.evaluate() 未打印控制台消息

page.evaluate() is not printing console message

我是 Javascript 的初学者,也是 phantomjs 的初学者。我正在尝试 运行 这个简单的控制台程序。但它没有打印 This is page evaluating!。我也可以在控制台 Page is opened successfully.

上看到这条消息

这是我的程序:

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

page.open("https://www.google.com/", function(){
    console.log("Page is opened successfully");

    page.evaluate(function(){
        console.log('This is page evaluating!');
    });

    phantom.exit();
});

完整输出:

页面打开成功

您必须注册到 page.onConsoleMessage 事件才能看到 console.log() 从打印到控制台的页面上下文,因为页面上下文(在 page.evaluate() 内)是沙盒的,那些事件不会自动显示。

page.onConsoleMessage = function(msg, lineNum, sourceId) {
    console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
};

在调用 page.evaluate() 之前注册事件,其中包含您感兴趣的 console.log()。大多数情况下,这应该在初始化全局变量之后完成:

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

page.onConsoleMessage = function(msg) {
    console.log('remote> ' + msg);
};

page.open("https://www.example.com/", function(){
    console.log("Page is opened successfully");

    page.evaluate(function(){
        console.log('This is page evaluating!');
    });

    phantom.exit();
});

其他有用的事件是:onResourceError, onError and onResourceError