我正在使用PhantomJS来截取网页。但是,库调用托管的jQuery文件在页面DOM中注入jQuery功能以允许一些操作。见到这里:http://phantomjs.org/api/webpage/method/include-js.html
代码如下所示:
if ( loaded ) {
page.includeJs("http://code.jquery.com/jquery-1.8.3.min.js",
function() { . . .
我不想对JS进行外部调用,因为(a)它的速度较慢,(b)不可靠。我想使用本地副本,我设置了这样的路径,但它没有加载。
page.includeJs("assets/javascript/jquery.min.js",
function() { . . .
这是什么问题?为什么我的道路不能像我期望的那样工作?这个函数page.includeJs
不允许相对路径吗?
答案 0 :(得分:4)
根据文档,此函数包含来自给定URL的脚本,该脚本需要可从托管页面访问。显然,远程主机上无法访问您的本地路径(相对或绝对),因此您需要使用injectJs
注入脚本。
编辑:以下是我用于测试的代码:
var page = require('webpage').create();
page.open("http://ipecho.net/", function(status) {
if ( status === "success" ) {
if (page.injectJs("jquery.min.js")) {
var h1 = page.evaluate(function() {
return $("h1:eq(0)").css({fontSize: 10, color: "red"}).text();
});
console.log(h1);
}
}
page.render("test.png");
phantom.exit();
});
额外的代码也可以像jquery一样注入,并且肯定会起作用。请记住evaluate()
限制(但在这种情况下,这并不是什么大问题):
注意: 评估函数的参数和返回值必须 是一个简单的原始对象。经验法则:如果可以的话 通过JSON序列化,然后就可以了。
闭包,函数,DOM节点等不起作用!
修改:还有关于您的文件路径问题:check what is your working directory。因此使用相对路径可能很棘手所以我建议你使用绝对路径。你只需要webpage.libraryPath
。我希望我现在能帮到你。