我试图在while循环中嵌套casper.then()动作。但是,似乎脚本从不执行那些casper.then()函数中的代码。
这是我的代码
casper.then(function() {
while (this.exists(x('//a[text()="Page suivante"]'))) {
this.then(function() {
this.click(x('//a[text()="Page suivante"]'))
});
this.then(function() {
infos = this.evaluate(getInfos);
});
this.then(function() {
infos.map(printFile);
fs.write(myfile, "\n", 'a');
});
}
});
我错过了什么吗?
答案 0 :(得分:0)
casper.then
计划队列中的一个步骤,不会立即执行。它仅在上一步完成时执行。由于父casper.then
包含的代码基本上是while(true)
,因此它永远不会完成。
你需要使用递归来改变它:
function schedule() {
if (this.exists(x('//a[text()="Page suivante"]'))) {
this.then(function() {
this.click(x('//a[text()="Page suivante"]'))
});
this.then(function() {
infos = this.evaluate(getInfos);
});
this.then(function() {
infos.map(printFile);
fs.write(myfile, "\n", 'a');
});
this.then(schedule); // recursive step
}
}
casper.start(url, schedule).run();