CasperJS: Durch URLs iterieren
Ich bin ziemlich neu in CasperJS, aber gibt es keine Möglichkeit, eine URL zu öffnen und CasperJS-Befehle in for-Schleifen auszuführen? Dieser Code funktioniert beispielsweise nicht wie erwartet:
casper.then(function() {
var counter = 2013;
for (i = counter; i < 2014; i++) {
var file_name = "./Draws/wimbledon_draw_" + counter + ".json";
// getting some local json files
var json = require(file_name);
var first_round = json["1"];
for (var key in first_round) {
var name = first_round[key].player_1.replace(/\s+/g, '-');
var normal_url = "http://www.atpworldtour.com/Tennis/Players/" + name;
// the casper command below only executes AFTER the for loop is done
casper.thenOpen(normal_url, function() {
this.echo(normal_url);
});
}
}
});
Stattdessen ruft Casper anthenOpen
Bei jeder neuen URL pro Iteration wird sie erst aufgerufen, nachdem die for-Schleife ausgeführt wurde. KasperthenOpen
wird dann mit dem letzten Wert aufgerufen, auf den normal_url gesetzt ist. Gibt es keinen Casper-Befehl, damit er bei jeder Iteration in der for-Schleife funktioniert?
Follow-up: Wie wird casper thenOpen veranlasst, einen Wert für die aktuelle Iteration der for-Schleife zurückzugeben?
Nehmen wir zum Beispiel an, ich brauchte einen Rückgabewert dafürthenOpen
(Wenn der HTTP-Status 404 ist, muss ich möglicherweise eine andere URL auswerten, damit ich false zurückgeben kann.) Ist das möglich zu tun?
Bearbeitungcasper.thenOpen
oben anrufen:
var status;
// thenOpen() only executes after the console.log statement directly below
casper.thenOpen(normal_url, function() {
status = this.status(false)['currentHTTPStatus'];
if (status == 200) {
return true;
} else {
return false;
}
});
console.log(status); // This prints UNDEFINED the same number of times as iterations.