我如何在 Perl 中使用 WWW::Mechanize::Firefox 和 find_link_dom 找到第二个 link 出现?

How do I find the second link occurance using WWW::Mechanize::Firefox and find_link_dom in Perl?

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

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

有没有办法让这个命令 return 第二个 link 匹配?

在有人评论说我需要更改我的搜索条件之前,文本是一样的。唯一不同的是 url,我不知道应该选择哪个 url。我需要符合上述搜索条件的第二个 link。

documentation 表示 returns 对象 。那是复数。还有这段代码。注意 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 );

有一个 second method,来自@simbabque 文档参考,我认为你应该尝试:

 $mech->find_all_links_dom %options

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

Finds all matching linky DOM nodes in the document. The options are documented in ->find_link_dom.

Returns them as list or an array reference, depending on context.

This defaults to not look through child frames.