Javascript 如何告诉CasperJS循环浏览一系列页面
我试图让CasperJS实现以下目标:Javascript 如何告诉CasperJS循环浏览一系列页面,javascript,while-loop,casperjs,Javascript,While Loop,Casperjs,我试图让CasperJS实现以下目标: 浏览按日期顺序命名的一系列页面 在每个页面上,找到一个PDF链接 下载PDF 我有一些工作代码,但我不明白CasperJS是如何处理事件序列的 例如,在下面的代码示例中,CasperJS尝试处理步骤2,并抛出一个“ReferenceError:找不到变量:formDate”,而步骤1由于某种原因根本没有执行 我的推理有什么问题 在我看来,while循环的执行速度与casper.then方法不同 casper.start(); casper.thenO
- 浏览按日期顺序命名的一系列页面
- 在每个页面上,找到一个PDF链接
- 下载PDF
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.start();
卡斯珀,然后打开http://www.example.com,函数(){
this.echo(this.getTitle());
});
casper.then(函数(){
var开始=新日期('2013-01-01T00:00:00');
var end=新日期('2013-01-31T00:00:00');
while(开始<结束){
//步骤1:定义formDate
casper.then(函数(){
var formDate=start.getFullYear()+“-”+(“0”+(start.getMonth()+1)).slice(-2)+“-”+(“0”+start.getDate()).slice(-2);
casper.echo(formDate);
});
//步骤2:打开页面并下载文件
卡斯珀,然后打开http://www.example.com/“+formDate,函数(){
var url=this.getElementAttribute('div#pdffulllink a.pdf','href');
this.echo(url);
下载(url,'Downloaded'+formDate+'.pdf');
});
casper.then(函数(){
//步骤3:重新定义开始
var newDate=start.setDate(start.getDate()+1);
开始=新日期(newDate);
});
}
});
casper.run(函数(){
this.echo('Done').exit();
});
经过一些研究,我找到了这个问题的解决方案
这个问题是由于casper.thenOpen是一个异步进程,而javascript的其余部分是同步的
我应用了(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();
});
循环正在工作!:) 在这个循环中,您将如何执行“continue”等效操作?
casper.async: 1
casper.async: 2
casper.async: 3
Done.