Ich verwende den folgenden Code basierend auf dem Beispiel loadloaded.js, um eine https: // Site zu öffnen, für die ebenfalls eine HTTP-Serverauthentifizierung erforderlich ist.
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();
});
}
Die Seite kann nicht ständig geladen werden. Was könnte hier falsch sein? Sollen gesicherte Sites anders gehandhabt werden? Auf die Site kann jedoch erfolgreich über den Browser zugegriffen werden.
Ich fange gerade erst mit Phantom an und finde es zu gut, mit dem Herumspielen aufzuhören, obwohl ich mit diesem Problem nicht weiterkomme.
quelle
Das Problem ist höchstwahrscheinlich auf SSL-Zertifikatfehler zurückzuführen. Wenn Sie phantomjs mit der Option --ignore-ssl-Errors = yes starten , sollte die Seite so geladen werden, als ob keine SSL-Fehler aufgetreten wären:
Ich habe einige Websites gesehen, die Probleme mit der falschen Implementierung ihrer SSL-Zertifikate haben oder abgelaufen sind usw. Eine vollständige Liste der Befehlszeilenoptionen für Phantomjs finden Sie hier: http://phantomjs.org/api/command-line. html . Ich hoffe das hilft.
quelle
phantomjs --ignore-ssl-errors=yes script.js
--ignore-ssl-errors=yes
Option sollte vor dem Skriptnamen stehen. Vielen Dank für den Hinweis.Beachten Sie, dass PhantomJS ab dem 16.10.2014 standardmäßig SSLv3 zum Öffnen von HTTPS-Verbindungen verwendet. Mit der kürzlich angekündigten POODLE-Sicherheitsanfälligkeit deaktivieren viele Server die SSLv3-Unterstützung.
Um dies zu umgehen, sollten Sie PhantomJS ausführen können mit:
Hoffentlich wird PhantomJS bald aktualisiert, um TLSv1 anstelle von SSLv3 zum Standard zu machen.
quelle
Ich habe das gleiche Problem festgestellt ... --ignore-ssl-error = yes war nicht genug, um es für mich zu beheben. Ich musste zwei weitere Dinge tun:
1) Benutzer-Agent ändern
2) Alle SSL-Protokolle ausprobiert, das einzige, das funktionierte war tlsv1 für die betreffende Seite
Hoffe das hilft ...
quelle
Ich hatte das gleiche Problem (casperjs 1.1.0-beta3 / phantomjs 1.9.7). Mit --ignore-ssl-Errors = yes und --ssl-protocol = tlsv1 wurde das Problem behoben. Die Verwendung nur einer der Optionen hat es für mich nicht gelöst.
quelle
Ich erhielt
Das Bauen von der Quelle hat es für mich behoben. Vergessen Sie nicht, die von Ihnen erstellten Phantomjs zu verwenden. (anstelle von / usr / local / bin / phantomjs, falls vorhanden)
quelle
Wenn jemand Phantomjs mit Sahi verwendet, muss die
--ignore-ssl-errors
Option in Ihre Datei browser_types.xml aufgenommen werden. Es hat bei mir funktioniert.quelle
Was ist mit
shebang
?Wenn Sie Shebang zum Ausführen von
phantomjs
Skripten verwenden, verwenden Sie die folgende Shebang-ZeileVerwenden Sie eine der oben genannten Antworten. Ich persönlich mag es,
--ignore-ssl-errors=yes
da es irrelevant ist, das selbstsignierte Zertifikat meiner Loopback-Webserver zu validieren.quelle
Keine der anderen Antworten hier hat mir geholfen; Es kann sein, dass die spezifischen Sites, mit denen ich gearbeitet habe, mit ihren HTTP-Headern zu wählerisch waren. Das hat funktioniert:
Ich fand heraus, dass PhantomJS "Keep-Alive" (groß geschrieben) verwendete und die Verbindung nicht am Leben gehalten wurde. :) :)
quelle
Ich wurde
SSL Handshake Failed
gestern. Ich habe viele Kombinationen von PhantomJS-Optionen ausprobiert (--ignore-ssl-errors=yes
usw.) , aber keine davon hat funktioniert.Ein Upgrade auf phantomJS 2.1.1 hat das Problem behoben.
Ich habe die Installationsanweisungen für phantomJS unter https://gist.github.com/julionc/7476620 verwendet und die phantomJS-Version auf 2.1.1 geändert.
quelle
Führen Sie auf dem Computer, auf dem Sie Phantomjs ausführen möchten, um eine Verbindung zu einem Remote-Server herzustellen, "openssl ciphers" aus. Kopieren Sie die aufgelisteten Chiffren und fügen Sie sie in die Befehlszeilenoption --ssl-ciphers = "" ein. Dies teilt dem verbindenden Webserver mit, welche Chiffren für die Kommunikation mit Ihrem Client verfügbar sind. Wenn Sie die auf Ihrem eigenen Computer verfügbaren nicht festlegen, kann eine beliebige Verschlüsselung verwendet werden. Ihr Computer versteht nicht, dass die modernen Standardbrowser für die Standardeinstellung verwendet werden.
quelle
Das einzige, was für mich funktioniert hat, war die Erhöhung der Phantomjs von 1.9x auf 2.x;)
quelle