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