2013-01-10 22 views
1

我試圖使用PhantomJS/CasperJS來刮一個網頁。我花了幾天的時間閱讀文檔,並在網上搜索,但我被卡住了。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,但我不知道會有多少元素在手邊。

在此先感謝。

回答