簡體   English   中英

WWW :: Mechanize :: Firefox單擊類的所有圖像

[英]WWW::Mechanize::Firefox clicking all images of a class

我正在嘗試使用WWW :: Mechanize :: Firefox瀏覽內部站點上的所有鏈接。 該站點通過javascript加載了一些內容,因此我必須首先單擊同一類“擴展”的某些元素。 該網站的結構如下:

<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 }); 

}   

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

我在這里想念什么嗎? 由於圖像不幸錯過了ID,我該怎么做才能單擊共享類的所有img標簽?

您已經擁有帶有圖像對象的Perl數組-只需對其進行迭代,而不是讓mech對其集合進行迭代。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM