gpt4 book ai didi

javascript - 如何告诉 CasperJS 循环访问一系列页面

转载 作者:可可西里 更新时间:2023-11-01 02:04:08 24 4
gpt4 key购买 nike

我尝试让 CasperJS 实现以下目标:

  • 浏览一系列按日期命名的页面。
  • 在每个页面上找到一个 PDF 链接。
  • 下载 PDF。

我有一些工作代码,但我不明白 CasperJS 是如何处理事件序列的。

例如,在下面的代码示例中,CasperJS 尝试处理第 2 步,并抛出“ReferenceError:找不到变量:formDate”,而第 1 步由于某种原因根本没有执行。

我的推理有什么问题?

在我看来,while 循环的执行速度与 casper.then 方法不同。

casper.start();

casper.thenOpen('http://www.example.com', function() {
this.echo(this.getTitle());
});

casper.then(function() {

var start = new Date('2013-01-01T00:00:00');
var end = new Date('2013-01-31T00:00:00');

while(start < end) {

// step 1: define formDate
casper.then(function() {
var formDate = start.getFullYear()+"-"+("0" + (start.getMonth() + 1)).slice(-2) +"-"+("0" + start.getDate()).slice(-2) ;
casper.echo(formDate);

});

// Step 2: open the page and download the file
casper.thenOpen('http://www.example.com/' + formDate, function() {

var url = this.getElementAttribute('div#pdffulllink a.pdf', 'href');
this.echo(url);
this.download(url, 'Downloaded_' + formDate + '.pdf');

});

casper.then(function() {
// Step 3: redefine start
var newDate = start.setDate(start.getDate() + 1);
start = new Date(newDate);

});

}

});


casper.run(function() {
this.echo('Done.').exit();
});

最佳答案

经过一番研究,我找到了解决这个问题的方法。

问题是由于 casper.thenOpen 是一个异步进程,而其余的 javascript 是同步

我申请了 an elegant method found in this thread (javascript for 循环内的异步进程)。

按照该方法,这是一个使用 CasperJS 的示例:

var casper = require('casper').create({
pageSettings: {
webSecurityEnabled: false
}
});

casper.start();

casper.then(function() {
var current = 1;
var end = 4;

for (;current < end;) {

(function(cntr) {
casper.thenOpen('http://example.com/page-' + cntr +'.html', function() {
this.echo('casper.async: '+cntr);
// here we can download stuff
});
})(current);

current++;

}

});

casper.run(function() {
this.echo('Done.').exit();
});

此示例将输出以下内容:

casper.async: 1
casper.async: 2
casper.async: 3
Done.

循环正常! :)

关于javascript - 如何告诉 CasperJS 循环访问一系列页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28421307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com