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