我有 2 个代码示例如下:
var page = require('webpage').create();
page.open('https://www.youtube.com', function(s) {
console.log(s);
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
var t = page.evaluate(function() {
console.log('here');
phantom.exit(); // case 1: inside page.evaluate()
});
});
});
-> 这种情况下phantom.exit()被放到了page.evaluate()里面,出现错误:"ReferenceError: Can't find variable: phantom"
var page = require('webpage').create();
page.open('https://www.youtube.com', function(s) {
console.log(s);
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
var t = page.evaluate(function() {
console.log('here');
});
phantom.exit(); // case 2: outside page.evaluate()
});
});
-> 情况 2:phantom.exit() 放在 page.evaluate() 之外。没有错误,但没有打印出'here'。
=> 以上两种方式都不能打印出'here'。有什么有效的方法可以无误地打印“这里”吗?
最佳答案
您不能在页面内部使用任何 phantom
方法,就像页面本身不能使用它们一样。
phantom
对象是运行时提供给它最初启动的脚本的特殊宿主对象。加载页面后,该页面将在其自己的上下文中使用常用的浏览器变量运行,其中不包括 phantom
。
您需要等待 page.evaluate
回调幻影脚本,然后从那里调用 exit
。魅影 docs show this exact case ,在 evaluate
返回后调用 exit
。它们似乎没有涵盖 evaluate
是否阻塞,但示例表明它可能是。
要从页面捕获日志消息,您需要订阅其 onConsoleMessage
event . Phantom 控制台只从它正在运行的脚本中获取消息,而不是它可能加载的任何页面。您需要做的就是将页面消息路由到幻影控制台:
page.onConsoleMessage = function(msg) {
console.log('PAGE: ' + msg);
};
关于javascript - 无法将 phantom.exit() 放入 page.evaluate() 中的 phantomjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33570915/