使用 mechanize-firefox 去 javascript link

going to a javascript link with mechanize-firefox

页面上有一个 link,我想转到它,但它只是一个 javascript 命令。我如何使用 mechanize 去 link?

<a href="javascript:__doPostBack(&#21;ctl54$cphMainContent$resultsGrid$ctl54$ctl25$ctl62$ctl13&#24;,&#56;&#56;)"><span>abc</span></a>

没有页面及其 HTML 和 JS,只能猜测。请注意,follow_link() 方法不适用于 JS links。下面的方法可以,当然没有页面我不能测试。

可能最好的选择是将 link(s) 作为 DOM 对象用于 click 方法

use WWW::Mechanize::Firefox;
# Get to your page with the link(s)
my $link = find_link_dom( text_regex => 'abc' );   # Or use find_all_links_dom()
$link->click();  
# $mech->click( { dom => $link } )  # works as well

还有 texttext_contains 相关选项(而不是 text_regex),以及其他一些选项。请注意,click 方法将在事件列表中等待,然后返回。参见示例 this recent post。这对于需要较长时间才能完成的页面至关重要。

请参阅 find_link_dom() and click 方法的文档。它们不是很详细或示例不丰富,但确实提供了足够的内容供您玩弄和理解。

如果你需要询问 links 使用 find_all_links_dom(), which returns an array or a reference to array (depending on context) of Firefox's DOM as MozRepl::RemoteObject 个实例。

my @links_dom = find_all_links_dom( text_contains => 'abc' );

# Example from docs for find_link_dom()
for my $ln (@links_dom) {
    print $ln->{innerHTML} . "\n"
}

请参阅 MozRepl::RemoteObject 页面,了解您可以用它做什么。如果您只需要找出要单击哪个 link,find_link_dom() 的选项就足够了。


这仅在玩具页面上进行了测试,该页面使用 __doPostBack link,在 link 中使用 <span>