Jef*_*yan 1 javascript loops phantomjs casperjs
我正在尝试使用PhantomJS/CasperJS来抓取网页.我花了最近几天阅读文档,并在网上搜索,但我被困住了.
我正在抓取的页面显示了三个级别的链接 - 年,月和日.当您选择年,月和日时,#count div中会显示一个计数.此外,月份实际上是改变#imageLoad div中图像的输入(我不需要).
<div id="years">
<span class="year">2010</span>
<span class="year">2011</span>
<span class="year">2012</span>
etc...
</div>
<div id="months">
<input type="image" class="month" src="jan_image.png" onclick="changepic('jan')" />
<input type="image" class="month" src="feb_image.png" onclick="changepic('feb')" />
<input type="image" class="month" src="mar_image.png" onclick="changepic('mar')" />
etc...
</div>
<div id="days">
<span class="day">1</span>
<span class="day">2</span>
<span class="day">3</span>
etc...
</div>
<div id="imageLoad">
</div>
<div id="count">
</div>
Run Code Online (Sandbox Code Playgroud)
我正在尝试遍历链接并记录每年,几个月和几天的组合出现的计数.如您所见,月份是改变图片的输入.
我尝试过很多东西.我想做的主要是嵌套循环,循环遍历每组链接,随时点击它们.这是代码(我使用的是jQuery):
casper.start(link);
casper.then(function() {
pageInfo = this.evaluate(function(){
values = [];
for(var y = 0; y < $('#years').length; y++){
year= $('#years span').get(y);
$(year).click();
for(var m = 0; m < $('#months').length; m++){
month= $('#months input').get(m);
$(month).click();
for(var d = 0; d < $('#days').length; d++){
day= $('#days span').get(d);
$(day).click();
values.push($('#count').text());
}
}
}
return values;
});
});
Run Code Online (Sandbox Code Playgroud)
我认为这将按顺序遍历每组链接,并且我将从年,月和日的每个变化中获得所有值.
但是,当我在脚本中单击月份输入时,脚本会中断并转到下一个casper.then语句.我有更好的方法吗?
我觉得我会以错误的方式解决这个问题,但我所尝试的其他任何事情都没有成效.似乎一旦它突破到下一个"那么"就没有回到我的循环中.
我试过循环Casper.each,但我不知道手头会有多少元素.
提前致谢.
仅为记录,此示例显示了使用casperjs在嵌套循环中执行操作的正确方法:
https://github.com/n1k0/casperjs/blob/master/samples/dynamic.js
根据您的需要调整它不会太多.