page - phantomjs example
phantomJS webpage timeout (1)
PhantomJS 1.9 ha introducido una nueva configuración, resourceTimeout
, que controla el tiempo que puede durar una solicitud antes de que se cancele. Junto con eso, hay un evento onResourceTimeout
que se activa cuando / cuando una solicitud se agota.
Aquí hay un fragmento de código que ilustra todo lo anterior:
var page = require(''webpage'').create();
page.settings.resourceTimeout = 5000; // 5 seconds
page.onResourceTimeout = function(e) {
console.log(e.errorCode); // it''ll probably be 408
console.log(e.errorString); // it''ll probably be ''Network timeout on resource''
console.log(e.url); // the url whose request timed out
phantom.exit(1);
};
page.open(''http://...'', function (status) {
...
}
Lamentablemente esas opciones están mal documentadas en este momento. Tuve que pasar por las discussions GitHub y el código fuente de PhantomJS para descubrirlos.
He configurado un script para crear webshots de nuestra aplicación. Funciona perfectamente y todo está bien hasta que encuentro una imagen con una URL rota:
"<img src=''http://testserver.our.intranet/fetch/image/373e8fd2339696e2feeb680b765d626e'' />"
Me las arreglé para romper el script después de 6 segundos usando lo siguiente, antes de que simplemente se repitiera para siempre.
Pero, ¿es posible ignorar la solicitud de red ( AKA
sacar la imagen de DOM
) y luego proceder a crear el pulgar sin la imagen (o con una imagen inyectada falta de imagen)?
var page = require(''webpage'').create(),
system = require(''system''),
address, output, size;
if (system.args.length < 3 || system.args.length > 5) {
phantom.exit(1);
} else {
address = system.args[1];
output = system.args[2];
page.viewportSize = { width: 640, height: 640 };
page.zoomFactor = 0.75;
page.clipRect = { top: 10, left: 0, width: 640, height: 490 };
try{
page.open(address, function (status) {
if (status !== ''success'') {
console.log(''Unable to load the address!'');
phantom.exit();
} else {
window.setTimeout(function () {
page.render(output);
phantom.exit();
}, 200);
}
});
} finally{
setTimeout(function() {
console.log("Max execution time " + Math.round(6000) + " seconds exceeded");
phantom.exit(1);
}, 6000);
}
}