Javascript CasperJS for循环在三个块中产生相同的结果,并带有时间延迟

Javascript CasperJS for循环在三个块中产生相同的结果,并带有时间延迟,javascript,for-loop,asynchronous,web-scraping,casperjs,Javascript,For Loop,Asynchronous,Web Scraping,Casperjs,我正在使用CasperJS从网站上获取数据。我的程序在表中找到一个标记,单击它,从新页面获取一些数据,返回到上一页,并重复下一个标记的过程 一切都进行得很顺利,直到我偶然发现了一个最奇怪的问题:CasperJS for循环在三块中产生相同的结果。无论第一次迭代返回什么,接下来的两次迭代都将返回相同的数据。它重复这个过程 示例 这个循环 casper.then(function() { var i = 1; var j = 9; var bookingNumber = 0; var

我正在使用CasperJS从网站上获取数据。我的程序在表中找到一个
标记,单击它,从新页面获取一些数据,返回到上一页,并重复下一个
标记的过程

一切都进行得很顺利,直到我偶然发现了一个最奇怪的问题:CasperJS for循环在三块中产生相同的结果。无论第一次迭代返回什么,接下来的两次迭代都将返回相同的数据。它重复这个过程

示例

这个循环

casper.then(function() {
  var i = 1;
  var j = 9;
  var bookingNumber = 0;
  var location = '';

  for (; i <= j;) {
    (function(index, max) {
      casper.then(function() {
        casper.waitForSelector(x('//*[@id="ListInmateNames"]/table'), function() {
          casper.click(x('//*[@id="ListInmateNames"]/table/tbody/tr[' + index + ']/td[1]/a'));
          this.echo('Loading details for inmate ' + index + ' of ' + max + '...', 'COMMENT');
        });
      });

      casper.then(function() {
        casper.waitForSelector(x('//*[@id="pnlResults"]/div[2]'), function() {
          bookingNumber = casper.fetchText(x('//*[@id="lblResults"]'));
          location = casper.fetchText(x('//*[@id="hlHousingLocation"]'));

          this.echo(bookingNumber);
          this.echo(location);
        });
      });

      casper.then(function() {
        casper.back();
      });

    })(i, j);

    i++;
  }
});
是什么让事情变得如此奇怪(以及我为什么这么问)

无论发生什么情况,它都将以三个数据块的形式返回相同的数据。我在sat中进行了数百次迭代,它仍然产生相同的模式输出。我认为使用同步JavaScript运行CasperJS的异步特性不会始终产生这种模式。但确实如此

有趣的是,在输出块之间有一点延迟。程序将回显迭代1-3,然后等待一秒钟,然后回显迭代4-6,然后等待一秒钟。这是一贯的行为

另外,在for循环中增加i++计数器两次仍然会产生三种模式输出行为的相同块,意味着在循环中增加i++两次会产生此输出

> Loading details for inmate 1 of 9... 2985842 Theo Lacy Facility

> Loading details for inmate 3 of 9... 2985842 Theo Lacy Facility

> Loading details for inmate 5 of 9... 2985842 Theo Lacy Facility
…希望你能明白

我尝试过的

  • 将i++计数器移到不同的代码块
  • 将i++计数器作为(;i)的
    for放置在for循环中
    
    > Loading details for inmate 1 of 9... 2985842 Theo Lacy Facility
    
    > Loading details for inmate 3 of 9... 2985842 Theo Lacy Facility
    
    > Loading details for inmate 5 of 9... 2985842 Theo Lacy Facility