页面上有一个链接,我想访问它,但它只是一个 javascript 命令。我如何使用 mechanize 访问链接?
<a href="javascript:__doPostBack(ctl54$cphMainContent$resultsGrid$ctl54$ctl25$ctl62$ctl13,88)"><span>abc</span></a>
页面上有一个链接,我想访问它,但它只是一个 javascript 命令。我如何使用 mechanize 访问链接?
<a href="javascript:__doPostBack(ctl54$cphMainContent$resultsGrid$ctl54$ctl25$ctl62$ctl13,88)"><span>abc</span></a>
如果没有页面及其 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_contains
text_regex
click
请参阅文档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>
在链接中。