Перейти на ссылку JavaScript с Mechanize-Firefox

На странице есть ссылка, и я хочу перейти на нее, но это всего лишь команда javascript. Как с механизатором мне перейти по ссылке?

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

1 ответ

Решение

Без страницы, ее HTML и JS можно только догадываться. Обратите внимание, что follow_link() методы не работают со ссылками JS. Метод ниже, но я, конечно, не могу проверить без страницы.

Вероятно, лучше всего получить ссылку (и) в качестве объекта (ов) 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

Это также text а также text_contains соответствующие варианты (вместо text_regex), наряду с рядом других. Обратите внимание, что click Метод будет ждать в списке событий, прежде чем вернуться. Смотрите, например, этот недавний пост. Это очень важно для страниц, выполнение которых занимает больше времени.

Смотрите документы для find_link_dom() а также click методы. Они не очень подробны или богаты примерами, но дают достаточно, чтобы поиграть и разобраться.

Если вам нужно опросить ссылки, используйте find_all_links_dom(), который возвращает массив или ссылку на массив (в зависимости от контекста) DOM Firefox как 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> в ссылке.

Другие вопросы по тегам