2017-08-02 1 views
0

J'ai donc fait fonctionner mon code et tout va bien. Cependant, il y a 90 pages qui doivent être grattées. J'ai essayé de mettre tout le script dans une boucle while mais il traite le code dans un sens qui n'a pas de sens pour moi. Il traitera d'abord la boucle et non les fonctions de la casse en premier. Je suis assez nouveau pour casperjs et je fais beaucoup de recherches afin s'il vous plaît ne pas me détruire: Exemple:CasperJS boucle de page

var page = 0; 
var pageLimit = 90; 

//start loop 
while (page < pageLimit) { 

var casper = require('casper').create({ 
    verbose: true, 
    logLevel: 'error', 
    pageSettings: { 
     userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4' 
    } 

var url = 'https://saucelabs.com/blog/page/' + page; 
//sorry saucelabs.com i needed an example site for this post 

var names = []; 

function getNames() { 
    var names = document.querySelector('.entry-title'); 

     var str = document.querySelector('.entry-title').textContent; 
     var extracted = str.replace(/(\r\n|\n|\r)/gm,"");  
     extracted = extracted.replace(/\s+$/, ''); 
     return extracted; 
}; 

casper.start(url, function() { 
    //getting started 
}); 

casper.then(function() { 
    names = this.evaluate(getNames); 
}); 

casper.run(function(){ 
    this.echo(names);   
    this.echo("\n Successful!").exit(); 
    page++; 
}); 

} //end loop 

Répondre

0

La vraie question ici est que casper exécute d'abord tout le code, évalue ensuite chaque then étape en ordre.

//First, create a casper isntance 
var casper = require('casper').create({ 
    verbose: true, 
    logLevel: 'error', 
    pageSettings: { 
     userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4' 
    }); 



var names = []; 

function getNames() { 
    var names = document.querySelector('.entry-title'); 

     var str = document.querySelector('.entry-title').textContent; 
     var extracted = str.replace(/(\r\n|\n|\r)/gm,"");  
     extracted = extracted.replace(/\s+$/, ''); 
     return extracted; 
}; 

// Then, start casper. 
casper.start(url); 

while (page < pageLimit) { 
    var url = 'http://whatever.com/' + page; 
    // Open the new URL, and on load define 
    casper.thenOpen(url, function() { 
     var name = this.evaluate(getNames); 
     names.push(name); 
    }); 
} //end loop 

// Now that all of the steps are set up, run then all 
casper.run(function(){ 
    this.echo(names);   
    this.echo("\n Successful!").exit(); 
    page++; 
}); 
+0

Je reçois une erreur de syntaxe avec le code que vous avez fourni. SyntaxeError: Jeton inattendu '>' –

+0

À droite, j'ai essayé d'utiliser la syntaxe ES6 car j'ai oublié que casper n'est pas encore mis à jour. J'ai corrigé le code. –

+0

Erreur différente maintenant = -) TypeError: undefined n'est pas un constructeur (en évaluant 'new Array (pageLimit) .fill (0)') –