Как найти вторую ссылку с помощью WWW:: Mechanize:: Firefox и найти ссылку dom в Perl?


Я использую find_link_dom, и это работает... чтобы найти первую ссылку, которая соответствует. Мне нужно найти вторую. Вот моя строка:

my $link = $mech->find_link_dom ( text_regex => 'abc' );

Есть ли способ для этой команды вернуть вторую ссылку, которая соответствует?

И прежде чем кто-то прокомментирует, что мне нужно изменить мои критерии поиска, текст тот же самый. Единственное, что отличается-это url, и я не знаю, только из url, который должен быть выбран. Мне нужна вторая ссылка, которая соответствует приведенному выше поиску.

2 2

2 ответа:

Документация говорит, что она возвращаетобъекты . Это множественное число. Существует также этот фрагмент кода. Обратите внимание на for.

print $_->{innerHTML} . "\n"
    for $mech->find_link_dom( text_contains => 'CPAN' );
Таким образом, вы можете просто вызвать его в контексте списка, чтобы получить все найденные ссылки, или просто взять тот, который вы хотите.
( undef, my $link ) = $mech->find_link_dom ( text_regex => 'abc' );

Это должно дать вам второе.

В качестве альтернативы, возьмите все из них и выводите, чтобы увидеть, что происходит.

use Data::Printer;

my @links = $mech->find_link_dom ( text_regex => 'abc' );
p @links

Или, вы можете использовать опцию n, которая является 1-based индекс .

my $second_link = $mech->find_link_dom( text_regex => 'abc', n => 2 );

Есть Второй метод, из @ simbabque documentation reference, который, я думаю, вы должны попробовать:

 $mech->find_all_links_dom %options

 print $_->{innerHTML} . "\n"
     for $mech->find_all_links_dom( text_regex => qr/google/i );

Находит все соответствующие узлы linky DOM в документе. Параметры задокументированы в ->find_link_dom.

Возвращает их в виде списка или ссылки на массив, в зависимости от контекста.

По умолчанию не просматриваются дочерние фреймы.