页面上有一个链接,我想转到它,但它只是一个javascript命令。我如何用机械化去链接?
<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>
。