2

我正在使用 find_link_dom 并且它正在工作......找到匹配的第一个链接。我需要找到第二个。这是我的台词:

my $link = $mech->find_link_dom ( text_regex => 'abc' );

这个命令有没有办法返回匹配的第二个链接?

在有人评论我需要更改搜索条件之前,文本是相同的。唯一不同的是网址,我不知道应该选择的网址。我需要与上述搜索匹配的第二个链接。

4

2 回答 2

2

文档说它返回objects。那是复数。还有这段代码。注意for.

print $_->{innerHTML} . "\n"
    for $mech->find_link_dom( text_contains => 'CPAN' );

因此,您可以在列表上下文中调用它来获取所有找到的链接,或者只获取您想要的链接。

( undef, my $link ) = $mech->find_link_dom ( text_regex => 'abc' );

那应该给你第二个。

或者,抓住所有这些并输出,看看发生了什么。

use Data::Printer;

my @links = $mech->find_link_dom ( text_regex => 'abc' );
p @links

或者,您可以使用选项n,它是基于1 的索引

my $second_link = $mech->find_link_dom( text_regex => 'abc', n => 2 );
于 2016-04-06T13:02:29.860 回答
1

还有第二种方法,来自@simbabque 文档参考,我认为你应该尝试:

 $mech->find_all_links_dom %options

 print $_->{innerHTML} . "\n"
     for $mech->find_all_links_dom( text_regex => qr/google/i );

在文档中查找所有匹配的链接 DOM 节点。这些选项记录在 ->find_link_dom 中。

根据上下文将它们作为列表或数组引用返回。

这默认不查看子框架。

于 2016-04-06T13:11:53.050 回答