Ich versuche, eine Webseite mit Nightmare zu crawlen, aber warten möchte, bis #someelem
vorhanden ist, nur wenn es tatsächlich existiert. Ansonsten möchte ich, dass Nightmare weitergeht. Wie kann dies unter Verwendung .wait()
getan werden?Nightmare Conditional Wait()
Ich kann .wait(ms)
nicht verwenden. Die Verwendung von .wait(selector)
bedeutet, dass Nightmare warten wird, bis das Element vorhanden ist, aber wenn die Seite dieses Element nie haben wird, wird Nightmare ewig warten.
Die letzte Option ist .wait(fn)
zu verwenden. Und ich habe so etwas wie dies versuchte
.wait(function(cheerio) {
var $ = cheerio.load(document.body.outerHTML);
var attempt = 0;
function doEval() {
if ($('#elem').length > 0) {
return true;
}
else {
attempt++;
if (attempt < 10) {
setTimeout(doEval,2000); //This seems iffy.
}
else {
return true;
}
}
}
return doEval();
},cheerio)
Also, warten und erneut versuchen (bis zu einer Schwelle), und wenn das Element nicht gefunden wird, dann einfach weiter. Der Code scheint um setTimeout falsch zu sein, weil .wait
im Browser-Bereich erfolgt.
Vielen Dank im Voraus!
Nightmare doc sagt: Warte, bis das 'fn' auf der Seite ausgewertet wird mit' arg1, arg2, ... 'gibt 'true' zurück. Warten bedeutet also, bis "wahr" zurückgegeben wird. Ja, du hast recht, es ist nicht wahr. – user