繁体   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