我正在使用 PhantomJS 获取给定 URL 的页面内容。
问题是在某些页面上 PhantomJS 无法加载某些资源(js、css...),我收到的错误是:
错误代码 5,操作取消
我可以重现此问题的网页是www.lifehacker.com http://www.lifehacker.com我无法获取的资源是:
- http://x.kinja-static.com/assets/stylesheets/tiger-4ee27d6612a71ee3c68440f8e9c0025c.css http://x.kinja-static.com/assets/stylesheets/tiger-4ee27d6612a71ee3c68440f8e9c0025c.css
- http://c.amazon-adsystem.com/aax2/amzn_ads.js http://c.amazon-adsystem.com/aax2/amzn_ads.js
- 还有其他一些...
我正在运行的命令是:
phantomjs --debug=true --cookies-file=cookies.txt --ignore-ssl-errors=true --ssl-protocol=tlsv1 fetchpage.js http://www.lifehacker.com
即使我删除 cookies-file、ignore-ssl-errors、ssl-protocol 等选项,结果仍然是一样的。
fetchpage.js 脚本是:
var webPage = require('webpage');
var system = require('system');
var page = webPage.create();
if (system.args.length === 1) {
console.log('Usage: fetchpage.js <some URL>');
phantom.exit(1);
}
var url = system.args[1];
page.open(url, function (status) {
console.log("STATUS: " + status);
if (status !== 'success') {
console.log(
"Error opening url \"" + page.reason_url
+ "\": " + page.reason
+ "\": " + page
);
phantom.exit(1);
} else {
var content = page.content;
console.log(content);
phantom.exit(1);
}
});
如果我在 Chrome 中打开同一页面,页面加载得很好。另外,如果我复制 phantomjs 无法加载的资源 URL 并将其粘贴到 Chrome 中,它们加载得很好。
我曾尝试用谷歌搜索类似的问题,但我只找到了一些关于设置超时的建议,这对我来说不起作用。
我在 phantomjs v1.9.0、1.9.8 和 2.0.1-development 上尝试过同样的事情。
更有趣的是,有时 phantomjs 脚本设法从所有资源获得完整响应,所以我怀疑缓存,但我无法强制服务器避免缓存。我尝试通过 phantomjs 发送自定义标头,如下所示:
...
var page = webPage.create();
page.customHeaders = {
"Cache-Control":"no-cache",
"Pragma":"no-cache"
};
page.open(url, function (status) {
...
但一切都没有改变。
我已经没有主意了..