node - ¿Cómo puedo controlar PhantomJS para omitir la descarga de algún tipo de recurso?
phantomjs selenium (4)
phantomjs tiene config loadImage,
pero yo quiero más,
¿Cómo puedo controlar phantomjs para omitir la descarga de algún tipo de recurso,
como css etc ...
=====
Buenas noticias: se agrega esta característica.
https://code.google.com/p/phantomjs/issues/detail?id=230
La esencia:
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();
}
};
Así que finalmente puedes probar esto http://github.com/eugenehp/node-crawler
De lo contrario, aún puedes probar el siguiente enfoque con PhantomJS.
La forma más sencilla es cargar la página -> analizar página -> excluir recursos no deseados -> cargarlo en PhatomJS.
Otra forma es simplemente bloquear los hosts en el firewall.
Opcionalmente, puede usar un proxy para bloquear ciertas direcciones URL y hacerles consultas.
Y adicional, cargue la página y luego elimine los recursos no deseados, pero creo que no es el enfoque correcto aquí.
De ninguna manera por ahora (phantomjs 1.7), NO es compatible con eso.
Pero una solución desagradable es usar un proxy http, por lo que puede eliminar una solicitud que no necesita
Use page.onResourceRequested
, como en el ejemplo 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();
}
};
ACTUALIZADO, trabajando!
Desde PhantomJS 1.9, la respuesta existente no funcionó. Debes usar este código:
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 usa abort () en lugar de cancel (), activará onResourceError.