使用PhantomJS调用page.evaluate()
时,是否可以在嵌入式JavaScript文件中引用函数?
e.g。我想调用my.js文件中包含的函数someFunctionInMyJs
:
var page = require('webpage').create();
page.injectJs('my.js')
page.open('http://...', function() {
var x = page.evaluate(function() {
var y = someFunctionInMyJs();
return y;
});
phantom.exit();
});
这可能/有替代方法吗?
my.js看起来像这样:
function someFunctionInMyJs() {
return 'Hi there!';
}
我得到的错误是:
ReferenceError: Can't find variable: someFunctionInMyJs
my.js位于我调用PhantomJS的文件夹中。
答案 0 :(得分:1)
问题是您在页面中注入了一个脚本:此时为空白,然后打开您想要的页面。您需要在page.open
回调中注入脚本。每次导航到另一页时都必须这样做。
page.open('http://...', function() {
page.injectJs('my.js')
var x = page.evaluate(function() {
var y = someFunctionInMyJs();
return y;
});
phantom.exit();
});
如果您的脚本例如交换了XMLHttpRequest的实现,您也可以尝试通过page.onInitialized
处理程序注入(injectJs
)脚本。
如果这仍然不起作用,则可能是您的功能不是全局的,在这种情况下您必须这样做。编辑my.js以将您的函数定义为
window.someFunctionInMyJs = function() {
return 'Hi there!';
};