Je sais qu'il y a certaines pages Web que PhantomJS/CasperJS ne peut pas ouvrir, et je me demandais si celle-ci en faisait partie: https://maizepages.umich.ed . CasperJS donne une erreur: PhantomJS n'a pas réussi à ouvrir l'état de la page = échec.
J'ai essayé d'ignorer les erreurs ssl et de changer mon agent utilisateur, mais je ne sais pas comment déterminer lesquels utiliser.
Tout ce que je fais en ce moment, c'est la configuration de base du casper avec casper.start(url, function () { ... })
où url=https://maizepages.umich.edu
;
Le problème peut être lié à la découverte récente d'une vulnérabilité SSLv3 (POODLE). Les propriétaires de sites Web ont été contraints de supprimer la prise en charge SSLv3 de leurs sites Web. Puisque PhantomJS <v1.9.8 utilise SSLv3 par par défaut , vous devez utiliser TLSv1:
casperjs --ssl-protocol=tlsv1 yourScript.js
La solution catchall serait d'utiliser any
lorsque les nouvelles versions de PhantomJS sont livrées avec d'autres protocoles SSL. Mais cela rendrait la vulnérabilité POODLE exploitable sur des sites qui n'ont pas encore désactivé SSLv3.
casperjs --ssl-protocol=any yourScript.js
Méthode alternative: mise à jour vers PhantomJS 1.9.8 ou supérieur. Notez que la mise à jour vers PhantomJS 1.9.8 conduit à un nouveau bogue , ce qui est particulièrement gênant pour CasperJS.
Comment vérifier: Ajoutez un resource.error
gestionnaire d'événements comme celui-ci au début de votre script:
casper.on("resource.error", function(resourceError){
console.log('Unable to load resource (#' + resourceError.id + 'URL:' + resourceError.url + ')');
console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString);
});
S'il s'agit bien d'un problème avec SSLv3, l'erreur sera quelque chose comme:
Code d'erreur: 6. Description: la négociation SSL a échoué
En passant, vous voudrez peut-être également exécuter le --ignore-ssl-errors=true
option de ligne de commande, en cas de problème avec le certificat.