web-dev-qa-db-ja.com

何らかのリソースのダウンロードをスキップするようにPhantomJSを制御するにはどうすればよいですか?

phantomjsにはloadImageの設定があり、

でももっと欲しい

何らかの種類のリソースのダウンロードをスキップするようにphantomjsを制御するにはどうすればよいですか、

cssなど...

=====

良いニュース:この機能が追加されました。

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

要旨:

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();
    }
};
52
atian25

更新済み、動作中!

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

Cancel()の代わりにabort()を使用すると、onResourceErrorがトリガーされます。

PhantomJSドキュメントを見る

17
webo80

最後に、これを試すことができます http://github.com/eugenehp/node-crawler

それ以外の場合は、PhantomJSで以下のアプローチを試すことができます

簡単な方法は、ページを読み込む->ページを解析する->不要なリソースを除外する-> PhatomJSに読み込むことです。

別の方法は、単にファイアウォールでホストをブロックするだけです。

オプションで、プロキシを使用して特定のURLアドレスとそれらへのクエリをブロックできます。

さらに、ページを読み込んで、不要なリソースを削除しますが、ここでは適切なアプローチではないと思います。

7
www.eugenehp.tk

使用する - 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();
    }
};
6
bain

今のところはありません(phantomjs 1.7)、それはサポートしていません。

しかし、厄介な解決策はHTTPプロキシを使用しているため、不要なリクエストを選別することができます

3
SHAWN