Phantomjs: bestimmte Seite nicht öffnen
Ich bin derzeit am schreiben einer web-Anwendung, bei der einige web-scraping. Um dabei zu helfen, ich bin beschäftigt die Hilfe von phantomjs. Jedoch, bestimmte (aber nicht alle) web-Seiten Rückgabe eines status="fail".
Hier ist der code (Hinweis: Dies ist geschrieben in nodejs mit der Knoten-phantom-Bibliothek finden Sie hier: https://github.com/alexscheelmeyer/node-phantom. Während die syntax kann unterschiedlich sein, die Bibliothek tatsächlich arbeitet direkt mit phantomjs, so sollte es nicht sein, etwas zu tun anders:
phantom.create(function (err,ph) {
ph.createPage(function (err,page) {
page.onResourceError = function(errorData) {
console.log('Unable to load resource (URL:' + errorData.url + ')');
console.log('Error code: ' + errorData.errorCode + '. Description: ' + errorData.errorString);
};
page.onLoadFinished = function(status) {
console.log('Status: ' + status);
if(status==='success') {
page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js', function () {
if(fetch_results) {
//THIS IS WHERE YOU WILL DO RESULTS SHIT
console.log("results page stuff entered");
page.render('phantomjs-test2.png');
ph.exit();
} else {
page.evaluate(function () {
//page evaluate stuff
}, function(err, result) {
console.log("entering here");
page.render('phantomjs-test.png');
if(!err) fetch_results = true;
});
}
});
} else {
console.log(
"Error opening url \"" + page.reason_url
+ "\": " + page.reason
);
console.log("Connection failed.");
ph.exit();
}
}
//page.open("https://www.google.com",function (err,status) {});
page.open("https://www.pavoterservices.state.pa.us/Pages/PollingPlaceInfo.aspx",function (err,status) {});
});
}, {parameters:{'ignore-ssl-errors':'yes'}});
Also für Seite.öffnen mit google.com die Seite lädt erfolgreich. Jedoch, mit der anderen url aufgeführt, es gibt den folgenden Fehler zurück:
Unable to load resource (URL:https://www.pavoterservices.state.pa.us/Pages/PollingPlaceInfo.aspx); Error code: 2. Description: connection closed; Error opening url "undefined": undefined
Jede Hilfe, warum wird google geladen, aber nicht die url aufgeführt würde sehr geschätzt werden!
- Könnte sein user-agent-header, vielleicht?
- Für die Referenz, es gibt Leute da draußen, die speziell versuchen zu stoppen phantom.js Kunden stackoverflow.com/questions/20862728/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
(Hinweis: ich antwortete genau das gleiche auf Problem Sie versuchen zu verwenden, PhantomJS zum verarbeiten einer web-Seite)
Versuchen Sie anrufen phantomjs mit --ssl-Protokoll=alle
Ich hatte exakt das gleiche problem mit einer externen Website, die gearbeitet, vor einer Woche.
So suchte ich, und fand ein ähnliches Problem beschrieben Qt QNetworkReply Verbindung geschlossen. Es hat mir geholfen, Blick in die phantomjs' embedded Qt: ist es standardmäßig zwingt, neue verbindungen in SSLv3, die entweder zu neu für alte Seiten, oder zu alt für neue Standorte (war aber ganz einen angemessenen Standard zu der Zeit Qt 4.8.4 freigegeben wurde).
Mit "jeder", werden Sie sagen, phantomjs, um zu versuchen, alle Protokolle, die sollte Ihnen helfen, den test zu bestehen. Es wird versuchen, mehr-Sicherheit-als-SSLv3 Protokolle, aber weniger sicheren-als-SSLv3 zu (SSLv3 ist im mittleren Bereich). Also, wenn "alle" arbeiten, dann sollten Sie versuchen zu zwingen, eine mehr-Sicherheit-als-SSLv3-Wert anstatt "alle". In meinem Fall, die Angabe von --ssl-Protokoll=tlsv1 gearbeitet.
Denke, dass die jüngsten Probleme mit SSL (goto fail, heartbleed, poodle, und so weiter) hat eine ganze Menge von Webseiten, die ein upgrade Ihrer Server, jetzt weigert SSLv3-verbindungen.
Aber im Falle dass Ihr server mit einem älteren-als-SSLv3-Protokoll, halten Sie die "jeder" (und alle die Sicherheits-Risiken...).
Dies funktionieren wird.