Comment pour la boucle dans casperjs
Je suis en train d'essayer de cliquer sur un bouton "suivant" N certain nombre de fois et de saisir la source de la page à chaque fois. Je comprends que je peux exécuter une fonction arbitraire sur le site distant, donc au lieu de cliquez sur() je viens d'utiliser la fonction de télécommande nextPage() Comment puis-je exécuter les opérations suivantes, un nombre arbitraire de fois:
var casper = require('casper').create();
casper.start('http://www.example.com', function() {
this.echo(this.getHTML());
this.echo('-------------------------');
var numTimes = 4, count = 2;
casper.repeat(numTimes, function() {
this.thenEvaluate(function() {
nextPage(++count);
});
this.then(function() {
this.echo(this.getHTML());
this.echo('-------------------------');
});
});
});
"je" est ici un indice je essayé à utiliser dans un script javascript pour la boucle.
Donc tl;dr: je veux lécher "suivant", print source des pages, cliquez sur 'suivant', print source de la page, cliquez sur "suivant" ... continuer que le nombre N de fois.
OriginalL'auteur Joe | 2013-09-16
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous pouvez passer une valeur de la distance contexte de la page (c'est à dire à
thenEvaluate
fonction comme ceci:Cependant,
Casper#repeat
peut-être pas une bonne fonction à utiliser ici que la boucle ne serait PAS attendre pour chaque chargement de la page, et puis capturer le contenu.Il faut plutôt concevoir un événement en fonction de chaînage.
Le flux de travail du code serait:
Avoir une variable globale (ou au moins une variable accessible pour les fonctions mentionnées ci-dessous) pour stocker les
count
et lalimit
.écouter la
charger.fini
événement et saisissez le code HTML ici, et ensuite appeler la page suivante.Simplifié le code peut être:
ok. D'abord ajouter ces 2 écouteurs d'événement:
// help is tracing page's console.log casper.on('remote.message', function(msg) { console.log('[Remote Page] ' + msg); });
// Print out all the error messages from the web page casper.on("page.error", function(msg, trace) { casper.echo("[Remote Page Error] " + msg, "ERROR"); casper.echo("[Remote Error trace] " + JSON.stringify(trace, undefined, 4)); });
Ci-dessus 2 écouteurs d'événement permettra d'écouter à distance les erreurs de page et de la console.journal appelé par JS éloignées de la page (vous pouvez appeler cela de la
evaluate
fonction. Maintenant, dans leevaluate
la fonction, avant vous êtes écriturereturn remoteCount;
ajouter cette ligneconsole.log(remoteCount);
. Cela permettra de montrer la valeur reçue directement de la page. Dans ce cas également fait la même chose, nous avons besoin de creuser plus profond.Il semble donc que les erreurs sont les mêmes à partir de la console dans un navigateur, mais il semble que la page que je suis en train d'essayer d'accéder à un rafraîchissement pour générer un identifiant unique pour la session (ou de la journée, ou de l'utilisateur, ou le navigateur, pas sûr), et l'ajoute à l'url. Cette rafraîchir les causes de votre code afin d'être incapable de faire appel nextPage(), parce que, je suppose, il n'existe pas sur le intital charge, pas sûr. De toute façon, mais une itération à partir de 0 au lieu de 1, je peux obtenir toutes les données dont j'ai besoin. MERCI BEAUCOUP POUR VOTRE AIDE!
OriginalL'auteur sudipto
Vous pouvez essayer d'utiliser
Casper#repeat
Cela devrait le faire, pour la plupart, ce que vous voulez:
la variable
count
utilisé à l'intérieur d'une évaluation doit être présent dans la distance à la page de la portée ou transmis en tant que paramètre par le biais d'évaluer la fonction.Oui, il semble que j'ai oublié de passer à travers comme un argument. Merci pour cette remarque.
OriginalL'auteur hexid
C'est la réponse à la question, comment les utiliser pour() dans casperjs de lancer plusieurs liens
OriginalL'auteur waza123