Estoy usando el siguiente código basado en el ejemplo de loadpeed.js para abrir un sitio https: // que también requiere autenticación del servidor http.
var page = require('webpage').create(), system = require('system'), t, address;
page.settings.userName = 'myusername';
page.settings.password = 'mypassword';
if (system.args.length === 1) {
console.log('Usage: scrape.js <some URL>');
phantom.exit();
} else {
t = Date.now();
address = system.args[1];
page.open(address, function (status) {
if (status !== 'success') {
console.log('FAIL to load the address');
} else {
t = Date.now() - t;
console.log('Page title is ' + page.evaluate(function () {
return document.title;
}));
console.log('Loading time ' + t + ' msec');
}
phantom.exit();
});
}
No carga la página todo el tiempo. ¿Qué podría estar mal aquí? ¿Los sitios seguros deben manejarse de manera diferente? Sin embargo, se puede acceder al sitio con éxito desde el navegador.
Estoy empezando con Phantom en este momento y me parece demasiado bueno para dejar de jugar aunque no estoy avanzando con este problema.
fuente
Lo más probable es que el problema se deba a errores del certificado SSL. Si inicia phantomjs con la opción --ignore-ssl-errors = yes , debería proceder a cargar la página como lo haría si no hubiera errores SSL:
He visto algunos sitios web que tienen problemas con la implementación incorrecta de sus certificados SSL o que han expirado, etc. Una lista completa de opciones de línea de comando para phantomjs está disponible aquí: http://phantomjs.org/api/command-line. html . Espero que esto ayude.
fuente
phantomjs --ignore-ssl-errors=yes script.js
--ignore-ssl-errors=yes
opción debe ir antes del nombre del script. Gracias por señalar esto.Tenga en cuenta que a partir del 16 de octubre de 2014, PhantomJS utiliza de forma predeterminada SSLv3 para abrir conexiones HTTPS. Con la vulnerabilidad POODLE anunciada recientemente, muchos servidores están deshabilitando el soporte SSLv3.
Para evitar eso, debería poder ejecutar PhantomJS con:
Con suerte, PhantomJS se actualizará pronto para que TLSv1 sea el predeterminado en lugar de SSLv3.
fuente
experimenté el mismo problema ...
--ignore-ssl-errors = sí no fue suficiente para solucionarlo, tuve que hacer dos cosas más:
1) cambiar el agente de usuario
2) probé todos los protocolos ssl, el único que funcionó era tlsv1 para la página en cuestión
Espero que esto ayude ...
fuente
Experimenté el mismo problema (casperjs 1.1.0-beta3 / phantomjs 1.9.7). Usar --ignore-ssl-errors = yes y --ssl-protocol = tlsv1 lo resolvió. Usar solo una de las opciones no me resolvió.
fuente
Estaba recibiendo
Construir desde la fuente lo arregló para mí. No olvide utilizar los phantomjs que creó. (en lugar de / usr / local / bin / phantomjs si lo tiene)
fuente
Si alguien está usando Phantomjs con Sahi, la
--ignore-ssl-errors
opción debe ir en su archivo browser_types.xml. Funcionó para mí.fuente
¿Qué hay de
shebang
?Si está usando shebang para ejecutar
phantomjs
scripts, use la siguiente línea shebangUtilice cualquiera de las respuestas anteriores. Personalmente me gusta,
--ignore-ssl-errors=yes
ya que es irrelevante validar el certificado autofirmado de mis servidores web loopback.fuente
Ninguna de las otras respuestas aquí me ayudó; puede ser que los sitios específicos con los que estaba trabajando fueran demasiado exigentes con sus encabezados HTTP. Esto es lo que funcionó:
Descubrí que PhantomJS estaba usando "Keep-Alive" (en mayúsculas), y la conexión no se mantenía viva. :)
fuente
Estaba recibiendo
SSL Handshake Failed
ayer. Probé muchas combinaciones de opciones de phantomJS (--ignore-ssl-errors=yes
etc.), pero ninguna funcionó.La actualización a phantomJS 2.1.1 lo solucionó.
Usé las instrucciones de instalación de phantomJS en https://gist.github.com/julionc/7476620 , cambiando la versión de phantomJS a 2.1.1.
fuente
En la máquina en la que está intentando ejecutar phantomjs para conectarse a un servidor remoto, ejecute "openssl ciphers". Copie y pegue los cifrados enumerados en la opción de línea de comandos --ssl-ciphers = "". Esto le dice al servidor web que se conecta qué cifrados están disponibles para usar para comunicarse con su cliente. Si no configura los que están disponibles en su propia máquina, puede usar cualquier cifrado que su máquina no comprenda que hacen los navegadores modernos predeterminados que se utilizan para la configuración predeterminada.
fuente
Lo único que funcionó para mí fue subir phantomjs de 1.9xa 2.x;)
fuente