CasperJS は初めてで、evaluate() 関数に問題があります。次のサンプルコードがあります。
var results = []; // a global var
var links = [link1, link2 ,....]; //a list of urls
var current = 0;
function search(url){
this.start(url, function(){
results = this.evaluate(function() {
var returnVal = [];
//some code to store data into returnVal
return returnVal;
};
})
}
function check(){
if(current<7){
this.echo('---Page' + (current + 1) + '---');
search.call(this, links[current]);
console.log(results.length);
this.run(check);
current++;
} else{
this.exit();
}
casper.start()
casper.then(function(){this.echo("starting");});
casper.run(check);
SO 基本的に、コードは 7 ページからいくつかのデータを収集し、そのデータをグローバル変数の結果に保存することになっています。各ページには、50 個のデータが保存されます。したがって、期待される出力は次のとおりです。
Starting
---Page1---
50
---Page2---
100
---Page3---
150
...
しかし、実際の出力は次のとおりです。
Starting
---Page1---
0
---Page2---
50
---Page3---
50
...
反復ごとに結果の長さが増加することを期待しています。ただし、実行すると、結果の長さは同じままでした。つまり、最初の反復の後、変更されませんでした。また、ページ 1 で長さが 0 である理由がわかりません。それがなぜなのか、私には理解できませんでした。