https - phantom - javascript headless browser
PhantomJS no puede abrir el sitio HTTPS (10)
Estoy usando el siguiente código basado en el ejemplo de loadspeed.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 forma diferente? Sin embargo, se puede acceder al sitio exitosamente desde el navegador.
Estoy empezando con Phantom en este momento y me parece demasiado bueno para dejar de jugar aunque no avance con este problema.
¿Qué hay de shebang
?
Si está utilizando shebang para ejecutar los scripts de phantomjs
, use la siguiente línea shebang
#!/usr/bin/phantomjs --ignore-ssl-errors=yes
var system = require(''system'');
var webpage = require(''webpage'');
// ... rest of your script
Use cualquiera de las respuestas anteriores. personalmente me gusta --ignore-ssl-errors=yes
ya que es irrelevante validar el certificado autofirmado de mi servidor de bucle invertido.
Ayer recibí SSL Handshake Failed
. Intenté muchas combinaciones de opciones 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.
El problema probablemente se deba a errores de 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 de SSL:
phantomjs --ignore-ssl-errors=yes [phantomOptions] script.js [scriptOptions]
He visto algunos sitios web que tienen problemas con la implementación incorrecta de sus certificados SSL o han caducado, etc. Una lista completa de opciones de línea de comandos para phantomjs está disponible aquí: http://phantomjs.org/api/command-line.html . Espero que esto ayude.
Experimenté el mismo problema (casperjs 1.1.0-beta3 / phantomjs 1.9.7). Usando --ignore-ssl-errors = yes y --ssl-protocol = tlsv1 lo resolvió. Usar solo una de las opciones no me lo resolvió.
Ninguna de las otras respuestas aquí me ayudó; Es posible que los sitios específicos con los que estaba trabajando fueran demasiado quisquillosos con sus encabezados HTTP. Esto es lo que funcionó:
var page = webpage.create();
page.customHeaders = {
"Connection": "keep-alive"
};
Descubrí que PhantomJS estaba usando "Keep-Alive" (en mayúscula), y la conexión no se mantenía viva. :)
Recibí "Error al crear contexto SSL" desde phantomJS (ejecutándose en CentOS 6.6)
La construcción desde la fuente me lo arregló. No te olvides de usar los phantomjs que construiste. (en lugar de / usr / local / bin / phantomjs si lo tiene)
sudo yum -y install gcc gcc-c++ make flex bison gperf ruby openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel libpng-devel libjpeg-devel
git clone git://github.com/ariya/phantomjs.git
cd phantomjs
git checkout 2.0
./build.sh
cd bin/
./phantomjs <your JS file>
Si alguien está usando Phantomjs con Sahi, la opción --ignore-ssl-errors
debe ir en su archivo browser_types.xml. Funcionó para mí
<browserType>
<name>phantomjs</name>
<displayName>PhantomJS</displayName>
<icon>safari.png</icon>
<path>/usr/local/Cellar/phantomjs/1.9.2/bin/phantomjs</path>
<options>--ignore-ssl-errors=yes --debug=yes --proxy=localhost:9999 /usr/local/Cellar/phantomjs/phantom-sahi.js</options>
<processName>"PhantomJS"</processName>
<capacity>100</capacity>
<force>true</force>
</browserType>
Tenga en cuenta que desde 2014-10-16, PhantomJS utiliza de forma predeterminada SSLv3 para abrir conexiones HTTPS. Con la vulnerabilidad POODLE recientemente anunciada, muchos servidores están deshabilitando la compatibilidad con SSLv3.
Para evitar eso, debería poder ejecutar PhantomJS con:
phantomjs --ssl-protocol=tlsv1
Afortunadamente, PhantomJS se actualizará pronto para que TLSv1 sea el predeterminado en lugar de SSLv3.
experimentado el mismo problema ...
--ignore-ssl-errors = yes no fue suficiente para arreglarlo, tuve que hacer dos cosas más:
1) cambio de usuario-agente
2) probé todos los protocolos ssl, el único que funcionó fue tlsv1 para la página en cuestión
Espero que esto ayude...
Probé las respuestas de Fred y Cameron Tinker, pero solo --ssl-protocol = cualquier opción parece ayudarme:
phantomjs --ssl-protocol=any test.js
También creo que debería ser mucho más seguro usar --ssl-protocol=any
ya que todavía está usando encriptación, pero --ignore-ssl-errors=true
ignorará (duh) todos los errores de ssl, incluidos los maliciosos.