我使用以下代码使用phantomjs截取页面的屏幕截图。它适用于大多数页面,但显示"取消操作"某些网址的错误。
var page = require('webpage').create(),
system = require('system');
page.viewportSize = {
width: 1366,
height: 800
};
page.onConsoleMessage = function(msg) {
console.log("CONSOLE MESSAGE:" + msg);
};
page.onResourceError = function(resourceError) {
console.log('Unable to load resource (#' + resourceError.id + 'URL:' + resourceError.url + ')');
console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString);
};
page.open(<URL>, function(status) {
if (status !== 'success') {
console.log('FAIL to load the address');
phantom.exit();
} else {
page.render("3.png");
phantom.exit();
}
});
console.log("opening");
网址无效的部分示例包括:http://india.gov.in
,http://timesofindia.indiatimes.com/
等。
对于india.gov.in
,对网址的第一个请求:http://india.gov.in/正在重新发送,并且所有现有操作都会在它之前被取消。其他一些URL也会发生类似的事情。
页面是否刷新?如果是,我该如何处理?
如何在phantomjs中关注重定向/重新加载?
进一步的调查给了我一些非常有趣的统计数据。在india.gov.in期间,phantomjs开始发送请求并在一个点接收响应(在发出请求ID后118
),待处理请求的数量为37
。幻影&#39;取消&#39;待处理的请求并从头开始加载页面。它开始再次发送请求。
在请求标识156
之后,待处理请求的数量再次为37
(此次仅收到一个请求的响应)。所以它再次取消了#39;所有待处理的请求都会重新开始。
在请求ID 194
之后,待处理请求的数量再次为37
,因此它再次取消并重新启动。
请求ID为232
后,待处理请求的数量再次为37
,但这次没有重新启动和取消。
幻影可以处理的待处理请求数量是否有限制?
感谢名单!!
注意!注意!注意!:它与开箱即用的phantomjs 2配合使用。但由于这仍在开发中,因此无法在我的生产设置中使用。有没有人知道1.9.8和2.0之间的哪个更新修复了它?我可以在1.9.8的源代码中导入该更改并构建它。
答案 0 :(得分:0)
请参阅此问题。
https://github.com/ariya/phantomjs/issues/10522
这与缺乏对bind()的可靠支持有关。使用phantomjs 1.9.7时,试图解决这个问题,但在版本2.0之前它从未完全解决。
修复工作在主分支中。对您而言,唯一的解决方案似乎是自己编译pre-release 2.0并在发布时升级到官方2.0。
答案 1 :(得分:0)
我也有同样的问题,我终于明白了原因。
您必须已启用磁盘缓存。
phantomjs的磁盘缓存有死锁错误。 通过多次在同一个URL上继续工作,我用完了这个bug。 如果删除缓存目录,则一切正常。