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