2017-08-02 7 views
0

私は自分のコードを稼働させています。しかし、いくつかのページが掻き取られる必要があります。 私は全体のスクリプトをwhileループに入れようとしましたが、そのコードがなぜそれほど意味をなさないのかでコードを処理します。最初にキャスパー関数ではなくループを処理します。 ので、私を破壊いけないしてください、私はcasperjsにかなり新しいですし、私は多くの研究をやっている: 例:CasperJSページループ

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 

答えて

0

ここでの本当の問題は、キャスパーは、最初に各thenのステップを評価し、その後、すべてのコードを実行していることです順番に。

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

提供されたコードで構文エラーが発生しました。 SyntaxError:予期しないトークン '>' –

+0

正しく、casperがまだ更新されていないことを忘れてしまったので、ES6構文を使用しようとしました。私はコードを修正した。 –

+0

異なるエラーnow = - ) TypeError:未定義は( 'new Array(pageLimit).fill(0)'を評価する)コンストラクタではありません –

関連する問題