Phantomjs无法打开某些URL

时间:2014-11-09 17:19:02

标签: http phantomjs network-security

我使用以下代码使用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.inhttp://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的源代码中导入该更改并构建它。

2 个答案:

答案 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。 如果删除缓存目录,则一切正常。