casperjs单击嵌套循环中的链接[英] CasperJs clicking links in a nested loop

问题描述

我正在尝试使用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>

我正在尝试循环循环链接,并记录每年,几个月和几天组合出现的计数.如您所见,月份是改变图片的输入.

我尝试了许多事情.我要做的主要事情是嵌套环路,该循环循环通过每组链接,在我走时单击它们.这是代码(我正在使用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;

    });
});

我认为这会按顺序循环遍历每组链接,我将从每年,月和一天的每个变化中获得所有值.

但是,当我单击脚本中的一个月输入时,脚本会断开并转到下一个casper.then语句.我有更好的方法吗?

我有一个错误的方式,但我尝试过的其他任何事情也没有富有成果.似乎总是一旦打破了下一个"然后",就没有回到我的循环.

我尝试使用Casper.each循环,但是我不知道在手中有多少个元素.

预先感谢.

推荐答案

仅用于记录,此示例显示了使用Casperjs在嵌套环中执行操作的正确方法:

.js

将其适应您需要的东西不会太多.

本文地址:https://www.itbaoku.cn/post/1739986.html