2017-03-17 26 views
0

我试图在while循环中嵌套casper.then()动作。但是,似乎脚本从不执行casper.then()函数内部的代码。在循环中嵌套casper.js动作

这里是我的代码

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

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