如何控制PhantomJS跳过下载某种资源?

时间:2012-02-28 17:04:06

标签: phantomjs

phantomjs有config loadImage,

但我想要更多,

如何控制phantomjs跳过下载某种资源,

如css等...

=====

好消息:好消息: 此功能已添加。

https://code.google.com/p/phantomjs/issues/detail?id=230

要点:

page.onResourceRequested = function(requestData, request) {
    if ((/http:\/\/.+?\.css/gi).test(requestData['url']) || requestData['Content-Type'] == 'text/css') {
        console.log('The url of the request is matching. Aborting: ' + requestData['url']);
        request.abort();
    }
};

4 个答案:

答案 0 :(得分:16)

更新,正常工作!

自PhantomJS 1.9以来,现有的答案都不起作用。您必须使用此代码:

var webPage = require('webpage');
var page = webPage.create();

page.onResourceRequested = function(requestData, networkRequest) {
  var match = requestData.url.match(/wordfamily.js/g);
  if (match != null) {
    console.log('Request (#' + requestData.id + '): ' + JSON.stringify(requestData));
    networkRequest.cancel(); // or .abort() 
  }
};

如果使用abort()而不是cancel(),它将触发onResourceError。

你可以look at the PhantomJS docs

答案 1 :(得分:7)

所以最后你可以尝试这个http://github.com/eugenehp/node-crawler

否则你仍然可以使用PhantomJS尝试以下方法

简单的方法是加载页面 - >解析页面 - >排除不需要的资源 - >加载到PhatomJS。

另一种方法就是阻止防火墙中的主机。

您可以选择使用代理来阻止某些URL地址和查询。

另外一个,加载页面,然后删除不需要的资源,但我认为这不是正确的方法。

答案 2 :(得分:6)

使用page.onResourceRequested,例如loadurlwithoutcss.js

page.onResourceRequested = function(requestData, request) {
    if ((/http:\/\/.+?\.css/gi).test(requestData['url']) || 
            requestData.headers['Content-Type'] == 'text/css') {
        console.log('The url of the request is matching. Aborting: ' + requestData['url']);
        request.abort();
    }
};

答案 3 :(得分:3)

现在没办法(phantomjs 1.7),它不支持。

但令人讨厌的解决方案是使用http代理,因此您可以筛选出一些您不需要的请求