无法使用PhantomJS加载页面资源
Unable to load page resources with PhantomJS
我正在使用PhantomJS获取给定URL的页面内容。问题是在一些页面上PhantomJS无法加载一些资源(js,css…),我得到的错误是:
错误代码5,操作已取消
我可以在www.lifehacker.com上重现这个问题的网页我无法获得的资源是:
- http://x.kinja-static.com/assets/stylesheets/tiger-4ee27d6612a71ee3c68440f8e9c0025c.css
- 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
即使我删除了cookie文件等选项,忽略ssl错误,ssl协议的结果仍然是一样的。
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开发中也尝试过同样的方法。
更有趣的是,有时phantomjs脚本能够从所有资源中获得完全响应,所以我怀疑缓存,但我无法强制服务器避免缓存。我尝试过通过phantomjs发送自定义的头,如下所示:
...
var page = webPage.create();
page.customHeaders = {
"Cache-Control":"no-cache",
"Pragma":"no-cache"
};
page.open(url, function (status) {
...
但一切都没有改变。
我没什么主意了。。
对于那些在寻求解决未完全加载在phantomjs上的资源时遇到此页面的程序员。我有一个项目,脚本会在一些资源上停滞/挂起。它是否会执行,是50/50。
经过一番挖掘,我发现了以下页面:https://github.com/ariya/phantomjs/issues/10652
设置资源超时的解决方案对我来说是可行的:
page.settings.resourceTimeout = 10000;
关于上述问题,我不确定这是否完全正确,但至少现在信息更容易找到,可以被视为解决某些问题的一部分。
相关文章:
- ADF:有条件地加载javascript资源
- 内容安全策略:页面's设置阻止加载资源
- 未能在Laravel中加载资源
- Nodejs服务器:加载资源失败:服务器的响应状态为404(未找到)
- js文件未加载js控制台say's”;不允许加载本地资源”;
- UIWebview赢得't通过基本身份验证加载动态加载的资源(通过jQuery mobile)
- AngularJS资源 - 加载多个资源
- 将 JSON 作为 HTML 中的资源加载以避免引导 ajax
- XMLHttp请求与“;html标签“;资源加载
- Rails资源:加载顺序
- 资源加载不正确,图像部分加载
- 如何防止Chrome中未附加元素的资源加载
- 如何在复杂的资源加载序列中正确链化承诺
- Rails混淆了js对实际路由的资源加载,并将其作为控制器动作处理
- 当异步资源加载完成时触发的Javascript事件
- 将静态jsp资源加载到产品index.html中
- 从外部或内部资源加载库,脚本等网站
- 当我尝试使用ajax时,chrome的控制台显示“资源加载失败”
- templateUrl资源加载不能使用webpack
- 当外部JavaScript或CSS资源加载失败时,检测并记录