J'essaie de créer un script en utilisant nightmarejs qui pourrait cliquer sur un bouton encore et encore, comme ce bouton youtube qui est en bas de la section des commentaires et qui charge les anciens commentaires chaque fois que vous appuyez dessus (exemple: youtube.com/watch?v=pZISJqJbQuU & list = RDpZISJqJbQuU # t = 3) et s'arrête quand il n'y a plus de bouton à cliquer.Problèmes d'asynchronisme avec NightmareJS
J'ai essayé d'appeler évaluer, seulement pour que la méthode end() soit appelée en premier et annule le processus. J'ai essayé d'utiliser setTimeout, setInterval, then(), convertissant la boucle en une récursivité. A chaque fois soit evaluer() terminera son travail mais ne quittera pas (juste suspendu) ou quittera avant de terminer son travail à cause d'une condition de concurrence avec end().
Y at-il un utilisateur expérimenté de nightmarejs?
function youtube_button_clicker(group) {
var nightmare = Nightmare({
show: true
});
nightmare
.goto(url)
.inject('js', 'jquery-3.1.0.js')
.then(
() => nightmare.
evaluate(function() {
for (i=0;i>LEN;i++)
{ setTimeout(() => { $(button_element).click() }, i * 2000); }
return "done"
}))
.catch(function (error) {
console.error('Search failed:', error);
});
}
Retirez la méthode .end() et il se bloque, mettez le .end() à nouveau et il ignore le processus - se ferme tôt. Que puis-je faire ?
Votre 'setTimeouts' doivent être enveloppé dans des promesses, alors vous devez les 'promettre.all' pour que vous obteniez un événement quand tout se termine alors vous devez passer le promis retourné par 'all' à' alors' afin que vous puissiez l'enchaîner avec un autre 'then' ou 'end' il correctement – slebetman
Pouvez-vous s'il vous plaît me montrer un exemple de code? – RetroCode