WWW :: Mechanize :: Firefox单击一个类的所有图像

时间:2016-03-03 15:37:23

标签: javascript html perl www-mechanize-firefox

我正在尝试使用WWW :: Mechanize :: Firefox抓取内部网站上的所有链接。该网站通过javascript加载一些内容,所以我必须先点击同一类的某些元素“展开”。网站的结构如下:

let theStringColor = Blue

garageNameLabel.backgroundColor = UIColor.theStringColor

单击图像会在div容器中加载更多内容。在网站上,有多个类扩展的图像,我必须单击它们才能访问所有内容。这是我失败的地方。

到目前为止我尝试过:

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

仅点击第一个图像元素。

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

返回尽可能多的数组元素,因为我可以在页面上手动计算。但是,我对如何将返回的数组元素插入到click-action中感到有点迷失。

我可以用

打开第一个元素
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.

但这并没有打开任何元素(不明白为什么)。

我在这里遗漏了什么吗?点击共享类的所有img标签需要做什么,因为图片不幸错过了ID?

1 个答案:

答案 0 :(得分:1)

你已经有了带有图像对象的Perl数组 - 只需迭代它,而不是让mech迭代它的集合。

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