Javascript CasperJS for循环在三个块中产生相同的结果,并带有时间延迟
我正在使用CasperJS从网站上获取数据。我的程序在表中找到一个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 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