2011-10-31 9 views
5

Estaba usando phantomjs para eliminar algunos datos de un sitio web. Con el fin de acelerar la carga He desactivado la ejecución de JS en la página web al hacer esto:javascript Problema habilitado en Phantomjs

page.settings.javascriptEnabled = false; 

pero esto hace que el problema - que hace page.evaluate(somefunc.toString()) retorno null no importa lo que la función debe devolver. Si mantengo la configuración js predeterminada en true, el page.evaluate() funcionaría nuevamente.

¿Cómo debo evitar esto? Gracias

+2

¿Hay una respuesta mejor aquí que "No hagas eso"? Si no habilita JS, la página no puede evaluar una función JS. (Además, puede pasar una referencia de función a 'page.evaluate()' - el '.toString()' no es necesario.) – nrabinowitz

+0

Tengo que estar de acuerdo con narbinowitz en esto. Si desactiva JS en una página, seguramente no podrá evaluar JS dentro del contexto de la página. –

+8

Tengo que estar en desacuerdo con eso, phantomJS se supone que funciona como lo haría el navegador. Si bien inhabilitas javascript en Chrome, por ejemplo, aún tienes acceso a la consola dentro de las herramientas de desarrollo y, en consecuencia, al objeto 'window'. Creo que debería imitar el mismo comportamiento, donde inhabilitar javascript significa que phantomjs solo debería deshabilitar los scripts para ejecutar dentro de la página, pero no impedir que el desarrollador evalúe los nuevos. a través de la consola, donde, en phantomjs, "evaluar" es el único camino a seguir. – zanona

Respuesta

3

En general, no hagas eso.

Sin embargo, si realmente necesita eso, es posible mantener activar JavaScript, pero la carga bloque externo Js archivos. Ej .:

page.onResourceRequested = function(requestData, request) { 
    if (requestData['Content-Type'] == 'application/javascript' || requestData['Content-Type'] == 'text/javascript') { 
    console.log('Disabling JavaScript files. Aborting: ' + requestData['url']); 
    request.abort(); 
    } 
};