【问题标题】:How do I find the second link occurance using WWW::Mechanize::Firefox and find_link_dom in Perl?如何在 Perl 中使用 WWW::Mechanize::Firefox 和 find_link_dom 找到第二个链接出现?
【发布时间】:2016-04-06 12:38:59
【问题描述】:

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

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

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

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

【问题讨论】:

标签: regex perl mechanize www-mechanize-firefox


【解决方案1】:

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

【讨论】:

  • 感谢您的帮助。另一个有点相关的问题。有没有办法搜索“标题”而不是文本?
  • @Bill 我看不到有内置的方法可以做到这一点。见metacpan.org/source/CORION/WWW-Mechanize-Firefox-0.78/lib/WWW/…。我猜你必须用你自己的 XPath 表达式来做到这一点。如果您对此有疑问,请提出一个新问题。
  • @Bill 你找到了做title 事情的方法吗?
  • 我没有。我走了一个不同的方向。
【解决方案2】:

@simbabque 文档参考中有一个second method,我认为您应该尝试一下:

 $mech->find_all_links_dom %options

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

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

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

这默认不查看子框架。

【讨论】:

  • 好地方。这可能是更简洁的选择,尽管界面有点可疑。但是请edit您的回答并删除第一行。这是一个很好的答案,不需要道歉。不过,您可以添加一个工作示例。
  • 是的,界面和文档还有待改进。
猜你喜欢
  • 2012-10-20
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多