2

私は find_link_dom を使用していますが、機能しています...一致する最初のリンクを見つけます。私は2番目を見つける必要があります。これが私の行です:

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

このコマンドが一致する 2 番目のリンクを返す方法はありますか?

検索基準を変更する必要があると誰かがコメントする前に、テキストは同じです。唯一の違いは URL であり、選択する必要がある URL だけではわかりません。上記の検索に一致する 2 番目のリンクが必要です。

4

2 に答える 2

2

ドキュメントには、objectsを返すと書かれています。それは複数形です。このコードもあります。に注意してくださいfor

print $_->{innerHTML} . "\n"
    for $mech->find_link_dom( text_contains => 'CPAN' );

したがって、リストコンテキストで呼び出すだけで、見つかったすべてのリンクを取得したり、必要なリンクを取得したりできます。

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

それはあなたに2番目のものを与えるはずです。

または、それらすべてを取得して出力し、何が起こっているかを確認します。

use Data::Printer;

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

または、 1 ベースのインデックスnであるオプションを使用できます。

my $second_link = $mech->find_link_dom( text_regex => 'abc', n => 2 );
于 2016-04-06T13:02:29.860 に答える
1

@simbabque ドキュメント リファレンスからの2 番目の方法があります。

 $mech->find_all_links_dom %options

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

ドキュメント内の一致するすべてのリンク DOM ノードを検索します。オプションは ->find_link_dom に記載されています。

コンテキストに応じて、リストまたは配列参照としてそれらを返します。

これはデフォルトで子フレームを調べません。

于 2016-04-06T13:11:53.050 に答える