CasperJS的循环控制很简单,用repeat()函数即可。
函数声明-repeat()
Signature: repeat(int times, Function then)
实例
用入参传入值供循环使用–这种需求很常见
//RepeatTest.js
var casper = require("casper").create();
i = 0;
casper.start().repeat(3,function(){
casper.echo(casper.cli.get(i));
i++;
});
casper.run();
测试
$ casperjs RepeatTest.js 1 2 3
1
2
3
一个实际应用的例子
考虑如下情形:需要实际获取某个论坛的帖子的url。
以中关村在线的搜索结果页面为例,要获取华为和小米搜索结果的前5页url。
//ZolGetNewsInfo.js
var casper = require('casper').create({
viewportSize: {
width: 800,
height: 600
},
pageSettings: {
loadImages: false,
loadPlugins: false,
userAgent: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/41.0.2272.118 Safari/537.36'
},
verbose: true,
logLevel: 'info',
stepTimeout: 300000,
onStepTimeout: function(timeout, stepNum) {
customEcho("step" + stepNum + ": time out!");
require('utils').dump(urls);
},
});
function getUrls() {
aList =[]
var aList1 = casper.getElementsAttribute("h3 a", "href");
aList.push(aList1)
}
var aList = [];
var urls = [];
var time_out_value = 30000;
var i = 1;
casper.start().repeat(5, function() {
base = casper.cli.get(0);
url = base +'&page='+i ;
i++;
casper.log('current url'+url,'info');
casper.open(url);
casper.wait(1000, function(){
getUrls();
},time_out_value);
casper.then(function() {
require('utils').dump(aList);
});
});
casper.run();
运行程序结果导入txt文件。
$casperjs ZolGetNewsInfo.js http://search.zol.com.cn/s/article_more.php?kword=xiaomi >zol.txt
$casperjs ZolGetNewsInfo.js http://search.zol.com.cn/s/article_more.php?kword=huawei >>zol.txt