2016-04-06 9 views
2

find_link_domを使用していますが、これは動作しています...一致する最初のリンクを見つける。私は2番目を見つける必要があります。ここに私の行があります:WWW :: Mechanize :: Firefoxとfind_link_domをPerlで使用して、2番目のリンクの出現を見つけるにはどうすればよいですか?

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

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

また、検索条件を変更する必要があるとコメントする前に、テキストは同じです。唯一の違いはURLであり、私は選択されるべきURLからちょうどわからない。私は上記の検索と一致する2番目のリンクが必要です。

+0

https://metacpan.org/pod/WWW::Mechanizeには、メソッドfind_link_domがありません。 – simbabque

+0

私はファイアフォックスを忘れてしまった。私は更新します。 – Bill

答えて

2

documentationには、オブジェクトが返されます。それは複数です。このコードもあります。 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); 
+0

助けてくれてありがとう。もう少し関連するもう一つの質問。テキストの代わりに「タイトル」を検索する方法はありますか? – Bill

+0

@Bill私はそれを行うための組み込みの方法はないと思う。 https://metacpan.org/source/CORION/WWW-Mchanchanize-Firefox-0.78/lib/WWW/Mechanize/Firefox.pm#L2317を参照してください。私はあなた自身のXPath式でそれをしなければならないと思います。問題がある場合は、新しい質問をしてください。 – simbabque

+0

@Billあなたは 'タイトル'のことをする方法を見つけましたか? – simbabque

1

は、私はあなたがしようとすべきだと思うことを、@simbabqueドキュメントの参照から、second methodあります:

$mech->find_all_links_dom %options 

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

は、文書内のすべての一致するLinkyはDO​​Mノードを検索します。オプションは - > find_link_domに記載されています。

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

このデフォルトでは、子フレームを見ていません。

+0

良い点。インターフェイスは少し疑わしいですが、それはおそらくより簡潔なオプションです。しかし、あなたの答えを編集して、最初の行を削除してください。これは答えとしてうまくいくので、謝罪する必要はありません。あなたは実際の例を追加することができます。 – simbabque

+0

うまくいけば、インターフェイスとドキュメントは改善の余地があります。 – eballes

関連する問題