web-dev-qa-db-fra.com

Comment puis-je contrôler PhantomJS pour ignorer le téléchargement d'une sorte de ressource?

phantomjs a config loadImage,

mais je veux plus de,

comment puis-je contrôler les phantomjs pour ignorer le téléchargement d'une sorte de ressource,

comme css etc ...

=====

bonne nouvelle: cette fonctionnalité est ajoutée.

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

L'essentiel:

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

MIS À JOUR, ça marche!

Depuis PhantomJS 1.9, la réponse existante ne fonctionnait pas. Vous devez utiliser ce code:

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

Si vous utilisez abort () au lieu de cancel (), cela déclenchera onResourceError.

Vous pouvez regardez les documents PhantomJS

17
webo80

Donc, finalement, vous pouvez essayer cela http://github.com/eugenehp/node-crawler

sinon vous pouvez toujours essayer l'approche ci-dessous avec PhantomJS

Le moyen le plus simple est de charger la page -> analyser la page -> exclure les ressources indésirables -> les charger dans PhatomJS.

Une autre façon consiste simplement à bloquer les hôtes dans le pare-feu.

En option, vous pouvez utiliser un proxy pour bloquer certaines adresses URL et requêtes à leur sujet.

Et un autre, chargez la page, puis supprimez les ressources indésirables, mais je pense que ce n'est pas la bonne approche ici.

7
www.eugenehp.tk

Utilisation page.onResourceRequested , comme dans l'exemple 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

Pas possible pour l'instant (phantomjs 1.7), il ne prend pas cela en charge.

Mais une solution désagréable utilise un proxy http, vous pouvez donc filtrer certaines demandes dont vous n'avez pas besoin

3
SHAWN