我正在尝试从多个页面下载文件。我想我会点击next
按钮,直到它被禁用,但由于某种原因casperjs停止后2页(有4页,直到结束)。
我是casperjs的新手,所以看起来我只是不理解一些基本的概念。
var casper = require('casper').create();
casper.on('load.finished', function (status) {
if (status !== 'success') {
this.echo ("Failed to load page.");
}
else {
//download_files_from_page();
this.echo ("1");
casper.click("#MainContent_btnNext1");
}
});
casper.start('http://matrixcatalog.co.il/NBCompetitionRegulations.aspx');
casper.run();
预期输出
1 1 1 1
实际输出 1 1
var casper = require('casper').create();
casper.on('load.finished', function (status) {
if (status !== 'success') {
this.echo ("Failed to load page.");
}
else {
//download_files_from_page();
this.echo ("1");
casper.click("#MainContent_btnNext1");
}
});
casper.start('http://matrixcatalog.co.il/NBCompetitionRegulations.aspx');
casper.run();
1 1 1 1
1 1
你可能退出得太早了。如果CasperJS执行完所有步骤,它将自动退出。只有then*
、wait*
和run
函数在队列中增加了一个步骤。
简单修复#1:
将casper.click(...)
改为casper.thenClick(...)
。
简单修复#2:
传递一个空函数给run
:
casper.run(function(){});
并在点击前退出:
if(!this.exists("#MainContent_btnNext1")) {
this.exit();
return;
}
适当的解决办法:
您应该使用适当的递归迭代,因为其他方法是基于假设的,对于未来版本的CasperJS可能不成立。
function handlePage(status) {
if (!this.exists(nextSelector)) {
this.echo("finished");
} else {
// do something
this.thenClick(nextSelector, handlePage);
}
});
casper.start(url, handlePage).run();