Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Phantomjs挂在资源密集型站点上_Javascript_Node.js_Phantomjs - Fatal编程技术网

Javascript Phantomjs挂在资源密集型站点上

Javascript Phantomjs挂在资源密集型站点上,javascript,node.js,phantomjs,Javascript,Node.js,Phantomjs,我不能总是让PhantomJS或PhantomJS节点在资源密集型站点上运行。例如,我的请求成功率约为50%http://www.huffingtonpost.com. PhantomJS通常会根据广告请求挂起 PhantomJS文档中的所有网络示例,如netsniff.js、netlog.js和fancy.js,似乎都有相同的问题 我尝试了几件事:设置resourceTimeout值,并尝试一些间隔来检查资源请求的运行时间,如果超过某个时间则中止。我一点运气都没有 resourceTimeou

我不能总是让PhantomJS或PhantomJS节点在资源密集型站点上运行。例如,我的请求成功率约为50%http://www.huffingtonpost.com. PhantomJS通常会根据广告请求挂起

PhantomJS文档中的所有网络示例,如netsniff.js、netlog.js和fancy.js,似乎都有相同的问题

我尝试了几件事:设置resourceTimeout值,并尝试一些间隔来检查资源请求的运行时间,如果超过某个时间则中止。我一点运气都没有

resourceTimeout似乎只是偶尔起作用

我的代码:

phantom.create(function (ph) {
  ph.createPage(function(page) {

    page.resources = [];

    page.set('settings.resourceTimeout', 800);
    page.set('settings.userAgent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0');

    page.set('onResourceTimeout', function(error) {
      console.log(error)
    })

    page.onResourceRequested(function(requestData, networkRequest) {},
                             function(req) {
      page.resources[req.id] = {
        request: req
      }
    })

    page.open('http://www.huffingtonpost.com', function(status) {

      if (status !== 'success') {
        console.log("Failed to load");
        ph.exit(1);
      }
      else {
        callback(page.resources);
        ph.exit();
      }
    })

  })
});
我在可以访问networkRequest的回调中尝试了以下操作:

检查似乎失败,出现错误:无法访问已删除QObject的成员“abort”


我试图识别所有资源,因此我不一定要忽略任何请求。有什么想法吗?

我们在使用1.x提供的PhantomJS二进制文件时也遇到了一些严重问题。我们刚刚克隆了repo,在Linux机器上构建了Phantom,并编译了更好的2.0.0分支。几天后,您终于可以在上获得2.0.0二进制文件了。你试过这个版本吗?@vanthome:谢谢!很好的建议。我升级了,性能明显更好。不幸的是,不管是否设置了超时,它仍然挂起大约相同的次数。我已经在自己的程序和示例netsniff.js上进行了尝试。我很好奇人们是否找到了一条绕过它的路。
var clock;
clearInterval(clock);

function check(){
  var current_time = new Date();
  var request_time = requestData.time;
  var diff = Math.abs(current_time - request_time);

  if (diff > 1500) {
    networkRequest.abort();
  };

}

clock = setTimeout(check, 2000);