Espera condicional de pesadelo ()
Estou tentando rastrear uma página da Web usando o Nightmare, mas quero aguardar#someelem
estar presente, apenas se ele realmente existir. Caso contrário, quero que o Nightmare siga em frente. Como isso pode ser feito usando.wait()
?
Não posso usar.wait(ms)
. Usando.wait(selector)
significa que o Nightmare continuará esperando até que o elemento esteja presente, mas se a página nunca tiver esse elemento, o Nightmare continuará esperando para sempre.
A última opção é usar.wait(fn)
. E eu tentei algo assim
.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)
Portanto, aguarde e tente novamente (até um limite) e, se o elemento não for encontrado, siga em frente. O código parece errado em relação ao setTimeout, porque.wait
é feito no escopo do navegador.
Desde já, obrigado!