gpt4 book ai didi

javascript - 无法将 phantom.exit() 放入 page.evaluate() 中的 phantomjs

转载 作者:行者123 更新时间:2023-11-30 12:11:47 26 4
gpt4 key购买 nike

我有 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com