1

PhantomJS/CasperJS を使用して Web ページをスクレイピングしようとしています。ここ数日、ドキュメントを読んだり、オンラインで検索したりしてきましたが、行き詰まっています。

私がスクレイピングしているページには、年、月、日という 3 つのレベルのリンクが表示されます。年、月、日を選択すると、#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が、事前にいくつの要素があるかわかりません。

前もって感謝します。

4

1 に答える 1

8

念のため、この例は、casperjs を使用してネストされたループで操作を実行する正しい方法を示しています。

https://github.com/n1k0/casperjs/blob/master/samples/dynamic.js

必要なものに適応させるのにそれほど時間はかかりません。

于 2013-02-09T22:20:15.043 に答える