Phantomjs挂在资源沉重的网站上

时间:2015-02-01 21:28:21

标签: javascript node.js phantomjs

我无法始终让PhantomJS或phantomjs-node在资源密集的站点上运行。例如,我成功申请http://www.huffingtonpost.com约50%。 PhantomJS通常会挂在广告请求上。

像netsniff.js,netlog.js和confess.js这样的PhantomJS文档中的所有网络示例似乎都有相同的问题。

我尝试了一些方法:设置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的回调中尝试了以下内容:

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);

检查似乎失败了Error: cannot access member 'abort' of deleted QObject

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

0 个答案:

没有答案