Как найти вторую ссылку с помощью WWW:: Mechanize:: Firefox и найти ссылку dom в Perl?
Я использую find_link_dom, и это работает... чтобы найти первую ссылку, которая соответствует. Мне нужно найти вторую. Вот моя строка:
my $link = $mech->find_link_dom ( text_regex => 'abc' );
Есть ли способ для этой команды вернуть вторую ссылку, которая соответствует?
И прежде чем кто-то прокомментирует, что мне нужно изменить мои критерии поиска, текст тот же самый. Единственное, что отличается-это url, и я не знаю, только из url, который должен быть выбран. Мне нужна вторая ссылка, которая соответствует приведенному выше поиску.
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.
Возвращает их в виде списка или ссылки на массив, в зависимости от контекста.
По умолчанию не просматриваются дочерние фреймы.