将循环中的casper.js动作嵌套

时间:2017-03-17 15:14:07

标签: javascript casperjs

我试图在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');
        });
      }
    });

我错过了什么吗?

1 个答案:

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