0

页面上有一个链接,我想访问它,但它只是一个 javascript 命令。我如何使用 mechanize 访问链接?

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

1 回答 1

1

如果没有页面及其 HTML 和 JS,我们只能猜测。请注意,这些follow_link()方法不适用于 JS 链接。下面的方法可以,但是如果没有页面我当然无法测试。

可能最好的办法是获取链接作为click方法的 DOM 对象

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

还有一些相关选项(而不是text),以及其他一些选项。请注意,该方法将在返回之前在事件列表上等待。例如,参见最近的这篇文章。这对于需要更长时间才能完成的页面至关重要。 text_containstext_regexclick

请参阅文档find_link_dom()click方法。它们的例子不是很详细或丰富,但确实提供了足够的东西来玩和弄明白。

如果您需要查询链接find_all_links_dom(),请使用 Firefox DOM 的数组或对数组的引用(取决于上下文)作为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页面以了解您可以使用它做什么。如果您只需要找出单击哪个链接的选项find_link_dom()就足够了。


这仅在一个使用__doPostBack链接的玩具页面上进行了测试,<span>在链接中。

于 2016-03-31T04:06:06.193 回答