8
votes

Casperjs - Comment ouvrir tous les liens dans une gamme de liens

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 pour boucle code> pour afficher les liens et cela fonctionne parfaitement. p>

Ceci est le code de ce que je viens d'expliquer: 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();


2 commentaires

Je viens de comprendre le seul problème que j'avais été cette ligne: pour (var i = 0; j <- J'ai accidentellement écrit j i au milieu.


En outre, this.exit (); semble rendre le script la sortie rien (je pourrais le retirer ou simplement le changer en casper.then (fonction () {this.exit (); }); ). Si je change ceux-ci, le code de la question fonctionne.


7 Réponses :


0
votes

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();


7 commentaires

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; à côté var x; , et pouvez-vous également ajouter i ++; ci-dessous console.log ...


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'>


Quelle version de Casperjs utilisez-vous? Si c'est avant 1.1, essayez de changer ceci.sherven à ceci.ach


Cela fonctionne, mais quelques modifications doivent être apportées à votre réponse. réponse.data n'a pas fonctionné pour moi. J'ai utilisé x [i] et ajouté 1 à i à chaque fois.


@mikikeyaworski, vous avez probablement eu cette erreur de Casperjs 1.0, alors que 1.1 ajoute chaque fonction



8
votes
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();

1 commentaires

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/...



8
votes
var i = 0;
var nTimes = x.length;

casper.repeat(nTimes, function() {
    //... do your stuff
    i++;
});
worked for me.

0 commentaires

1
votes
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.

1 commentaires

Si Array est un tableau réel, il est préférable d'utiliser array.foreach (fonction (élément (article) {Casper.thenopen (partial + élément)}) .



2
votes

Dans mon cas, j'ai dû gratter un site qui avait un nombre inconnu de pages. Chaque page (sauf le dernier) avait un page suivante lien (où n 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.

Bien sûr, vous devrez effectuer des ajustements en fonction de quel type de liens de pagination pourrait exister sur votre page. .

Voici ce que j'ai fait. Ymmv. xxx

espère que cela aide quelqu'un. Si vous avez d'autres questions, je serai heureux d'essayer d'aider.


1 commentaires

Pourriez-vous s'il vous plaît me signaler dans la bonne direction ici: Stackoverflow.com/questions/50577513/...



0
votes

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 () {

            })
        });
    })
});


0 commentaires

5
votes
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 + ".");
    });
});

0 commentaires