经过几个小时无果而终的搜索,我在这里发帖。 PhantomJS不允许我使用下面代码中的变量,并在运行我的脚本“无法找到变量”时出现错误消息。
你知道我的问题在哪里吗?
page.open(myurl, function (status) {
if (status == 'success') {
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js", function() {
elem = page.evaluate(function () {
/* Select one element with jQuery */
myElem = $('body');
return myElem;
})
var elemHtml = page.evaluate(function() { return $(elem).html(); });
console.log(elemHtml);
})
phantom.exit();
}
})
谢谢=)
答案 0 :(得分:19)
Quick Start教程(代码评估部分)中有一条重要信息:
要在网页上下文中评估JavaScript或CoffeeScript代码,请使用evaluate()函数。执行是“沙盒”,代码无法访问其自身页面上下文之外的任何JavaScript对象和变量。可以从evaluate()返回一个对象,但它仅限于简单对象,不能包含函数或闭包。
您的代码问题有两个方面:
elem
在网页上下文之外初始化,无法从第二个evaluate
访问。这是一个容易解决的问题,主要是通过正确设计代码以适应实际的“监禁”执行模型。请仔细阅读所有相关文档并探索大量included examples。