J'essaie de le faire pour que Caspertorjs ouvre chaque lien dans un tableau code> code> de liens. Je l'ai donc, après avoir ouvert un lien, il affichera le titre de cette page. Pourtant, quand je l'exécute, rien ne s'affiche.
Je peux utiliser un Ceci est le code de ce que je viens d'expliquer: P> pour boucle code> pour afficher les liens et cela fonctionne parfaitement. p>
var x;
casper.start(URL, function() {
x = links.split(" "); // now x is an array of links
this.exit();
});
for (var i = 0; j < x.length; i++) // for every link...
{
casper.thenOpen(partialURL + x[i], function() { // open that link
console.log(this.getTitle() + '\n'); // display the title of page
});
}
casper.run();
7 Réponses :
Essayez quelque chose comme ça.
var x; casper.start(URL, function() { x = links.split(" "); // now x is an array of links }); casper.then(function() { this.eachThen(x, function(response) { this.thenOpen((partialURL + response.data), function() { this.echo(this.getTitle()); // display the title of page }); }); }); casper.run();
Rien ne se passe encore.
J'ai essayé d'éditer votre réponse et je suppose que cela a été refusé pour une raison étrange. Pourriez-vous s'il vous plaît ajouter var i; code> à côté
var x; code>, et pouvez-vous également ajouter
i ++; code> ci-dessous
console.log ... code>
Je l'ai changé pour utiliser chacun au lieu de répéter. Ça devrait travailler maintenant
TypeError: 'non défini' n'est pas une fonction <évaluant 'this.eachthen'> code>
Quelle version de Casperjs utilisez-vous? Si c'est avant 1.1, essayez de changer ceci.sherven code> à
ceci.ach code>
Cela fonctionne, mais quelques modifications doivent être apportées à votre réponse. réponse.data code> n'a pas fonctionné pour moi. J'ai utilisé
x [i] code> et ajouté 1 à
i code> à chaque fois.
@mikikeyaworski, vous avez probablement eu cette erreur de Casperjs 1.0, alors que 1.1 ajoute chaque fonction
var x; var i = -1; casper.start(URL, function() { x = links.split(" "); // now x is an array of links }); casper.then(function() { this.each(x, function() { i++; // change the link being opened (has to be here specifically) this.thenOpen((partialURL + x[i]), function() { this.echo(this.getTitle()); // display the title of page }); }); }); casper.run();
Luttant avec quelque chose de similaire mais il n'y a pas exactement aucun lien disponible pour sélectionner et ouvrir. Au lieu de cela, il y a des divs avec des liens. Voici le problème: Stackoverflow.com/questions/50577513/...
var i = 0; var nTimes = x.length; casper.repeat(nTimes, function() { //... do your stuff i++; }); worked for me.
casper.start(); casper.each(Object.keys(array), function(casper, array_elem) { this.thenOpen(partialURL+array[attay_item], function() { ... }; And as to "undefined" error. Try not to use this too much. I experience this error with CasperJS to often, so I prefer to write casper instead of this.
Si Array code> est un tableau réel, il est préférable d'utiliser
array.foreach (fonction (élément (article) {Casper.thenopen (partial + élément)}) code>.
Dans mon cas, j'ai dû gratter un site qui avait un nombre inconnu de pages. Chaque page (sauf le dernier) avait un Bien sûr, vous devrez effectuer des ajustements en fonction de quel type de liens de pagination pourrait exister sur votre page. . P> Voici ce que j'ai fait. Ymmv. P> espère que cela aide quelqu'un. Si vous avez d'autres questions, je serai heureux d'essayer d'aider. P> p> page suivante code> lien (où
n code > est le numéro de page). Il n'y avait aucun moyen que le grattoir sache quand il a été fini, sauf lorsque le lien "Page suivante" n'était plus présent.
Pourriez-vous s'il vous plaît me signaler dans la bonne direction ici: Stackoverflow.com/questions/50577513/...
J'ai résolu le même problème avec ce code:
casper.then(function () { var i = -1; this.eachThen(locations, function () { i++; //Do stuff here like for example: this.thenOpen(YOUR_URL, function () { this.waitForSelector("MYSELECTOR", function () { }, function () { }) }); }) });
casper.start('about:blank'); var urls = ['http://google.fr', 'http://yahoo.fr', 'http://amazon.fr']; casper.each(urls, function(casper, url) { casper.thenOpen(url, function() { this.echo("I'm in your " + url + "."); }); });
Je viens de comprendre le seul problème que j'avais été cette ligne:
pour (var i = 0; j <- J'ai accidentellement écrit
j code>
i code> au milieu.
En outre,
this.exit (); code> semble rendre le script la sortie rien (je pourrais le retirer ou simplement le changer en
casper.then (fonction () {this.exit (); }); code>). Si je change ceux-ci, le code de la question fonctionne.