CasperJS analyse la page suivante après le clic du bouton

J'utilise Casperjs pour avoir recours à un test.

Algorithme est une page d'analyse d'URL ouverte, cliquez sur le bouton pour charger la page suivante. Comment saisir les pages suivantes jusqu'à ce que le test soit terminé. Toutes les questions sont aléatoires et je ne suis pas la prochaine question avant le formulaire soumis.

J'ai besoin de pages d'analyse comme un cycle ou récursif. Mon code est:

casper.start(startUrl, function () { this.click('#training'); this.evaluate(function () { $('input[type="submit"]:first').click(); }); }); casper.then(function () { var currentUrl = this.getCurrentUrl(), startIdPos = currentUrl.indexOf('=') + 1, questionId = currentUrl.slice(startIdPos), content = $(this.getHTML()), answers = [], question, startCorrectAnswerPos = content.find('script:nth-child(2)').html().indexOf('var bc='), correctAnswer = content.find('script:nth-child(2)').html().slice(startCorrectAnswerPos + 8, startCorrectAnswerPos + 9); question = content.find('table.quizz p.qw').html(); console.log(">>>>>>" + this.getCurrentUrl()); this.fill('form', { 'answer': correctAnswer }, true); }); casper.run(); 

Ce code complète l'analyse d'une seule page, mais ne redirige pas vers la page suivante et analysez-la. Qu'est-ce que je fais mal?

EDIT: Vous devez nicher les étapes pour les pages suivantes, car sur chaque page que vous évaluez si vous devez aller plus loin. Aussi, vous devez vérifier l'URL après avoir soumis le formulaire.

 function answer() { var currentUrl = this.getCurrentUrl(), startIdPos = currentUrl.indexOf('=') + 1, questionId = currentUrl.slice(startIdPos), content = $(this.getHTML()), answers = [], question, startCorrectAnswerPos = content.find('script:nth-child(2)').html().indexOf('var bc='), correctAnswer = content.find('script:nth-child(2)').html().slice(startCorrectAnswerPos + 8, startCorrectAnswerPos + 9); question = content.find('table.quizz p.qw').html(); console.log(">>>>>>" + this.getCurrentUrl()); if (question) { this.then(function(){ this.fill('form', { 'answer': correctAnswer }, true); }); this.then(answer); } }; casper.then(answer); 

Échangez ce code pour votre bloc casper.then .


Réponse précédente: Je ne sais pas quel type de bouton / lien #training est, mais il se peut que vous devez attendre que la modification de la page se produise. Vous pouvez utiliser la fonction casper.waitForSelector .

De plus, je ne sais pas pourquoi vous écrivez

 this.evaluate(function () { $('input[type="submit"]:first').click(); }); 

Et pas simplement this.click('input[type="submit"]:first'); .