2016-03-03 35 views
1

我想抓取內部網站上的所有鏈接使用WWW :: Mechanize :: Firefox。該網站通過JavaScript加載一些內容,因此我必須先點擊同一個類的某些元素「展開」。該網站的結構是這樣的:WWW :: Mechanize :: Firefox點擊一個類的所有圖像

<table> 
    <tr> 
    <td> 
    <a id="xyz" href="somesite"> Content </a> 
    </td> 
    </tr> 
    <tr> 
    <td> 
     <div> 
     <a id="twistie" onclick="expand_this"> 
      <img class="expand" border="0" width="13" height="13" alt="Show All" title="Show All" src="images/plus.gif"> 
     </a> 
     </div> 
    </td> 
    </tr> 
</table> 

點擊圖片加載更多內容在div容器中。在這個網站上,這些類的圖片有多個展開,我必須單擊它們才能訪問所有內容。這是我失敗的地方。

我迄今爲止嘗試:

$mech->click({ xpath => '//img[@class="expand"]', synchronize => 0 }); 

這隻會點擊第一個圖像元素。

my @images = $mech->xpath('//img[@class="expand"]', synchronize => 0); 

返回儘可能多的數組元素,因爲我可以在我的頁面上手動計數。不過,如何將返回的數組元素插入到點擊操作中,我有點遺憾。

我可以

$mech->click({ xpath => '//img[@class="expand"][0]', synchronize => 0 }); 

$mech->click({ xpath => '//img[@class="expand"][1]', synchronize => 0 }); 

打開的第一個元素返回我

No elements found for //img[@class="expand"][1] at (eval 1377)[/usr/share/perl/5.18/perl5db.pl:732] line 2. 

我試圖進一步這一做法:

foreach my $id (0 .. scalar @images) { 
    print $id, "\n"; 
    $mech->click({ xpath => qq(//img[\@class="expand"]["$id"]), synchronize => 0 }); 

} 

但這並沒有打開任何元素(不知道爲什麼)。

我在這裏錯過了什麼嗎?點擊一個共享類的所有img標籤,我需要做些什麼,因爲這些圖片不幸遺漏了一個id?

回答

1

你已經有Perl數組和圖像對象了 - 只是遍歷它,而不是讓機器人迭代它的集合。

foreach (@images) { $mech->click($_) } 
+0

謝謝您的建議!我已經嘗試了這種方法,但在第一次點擊後,程序掛起。我想我必須再次同步點擊,但嘗試'$ mech-> click($ plusses [0],{synchronize => 0});'在我的調試器中也掛起了。 – yulivee

相關問題