page.evaluate() を呼び出すと、評価されたコードがサンドボックスで実行されます。サンドボックスのコンソールは、PhantomJS のコンソールと同じではありません。
スクリプトに次の行を追加すると、ページのコンソールが stderr に出力されます。
var system = require('system');
page.onConsoleMessage = function(msg) {
system.stderr.writeLine('console: ' + msg);
};
より完全な実装は次のようになります。
var page = require('webpage').create()
var system = require('system');
var foo = 42;
page.onConsoleMessage = function(msg) {
system.stderr.writeLine( 'console: ' + msg );
};
function evaluate(page, func) {
var args = [].slice.call(arguments, 2);
var fn = "function() { return (" + func.toString() + ").apply(this, " + JSON.stringify(args) + ");}";
return page.evaluate(fn);
}
page.open(
'http://google.com',
function() {
var foo = 42;
evaluate(
page,
function(foo) {
console.log(foo);
},
foo
);
console.log( "Done" );
phantom.exit( 0 ); // must exit somewhere in the script
}
);
出力:
$ phantomjs /tmp/idiot.js
console: 42
Done
ちなみに、evaluate 関数をサンドボックスでテストしたいだけの場合は、"about:blank" を URL として使用して page.open を呼び出すことができます。