2016-03-30 3 views
0

ページにリンクがありますが、私はそれに行きたいですが、それは単なる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リンクでは機能しません。以下の方法はありますが、もちろんページなしでテストすることはできません。

はおそらく最善の策は、番号とともに、(代わりに text_regexの) texttext_contains関連するオプションもあります

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 

click方法のためのDOMオブジェクト(複数可)としてリンク(複数可)を取得することです他人の。 clickメソッドは、イベントのリストで待機してから、戻ります。例えば、this recent postを参照してください。これは完了までに時間がかかるページにとっては重要です。

find_link_dom()およびclickの方法についてのドキュメントを参照してください。彼らは非常に詳細ではなく、豊かな例ではありませんが、十分に遊びとそれを把握するために提供しています。

あなたがリンクを調べる必要がある場合は、MozRepl::RemoteObjectインスタンスとして、FirefoxのDOMの配列または配列への参照(コンテキストに応じて)を返すfind_all_links_dom()を使用します。

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::RemoteObjectfind_link_dom()のオプションをクリックするリンクを見つけ出す必要がある場合は、難解です。


これは、リンクで<span>で、__doPostBackリンクを使用していますおもちゃのページでのみテストされています。

+0

find_all_links_domを使用するリンクをどのようにループして、それらのデータを見ることができますか? – Bill

+0

@Bill 'find_all_links_dom()'は、適切なメソッドを呼び出すことができるDOMオブジェクトの配列を返します。つまり、 'for $ dobj(@links){}'のような通常のループを設定し、どのように曖昧さを除去する必要があるかによって、それぞれに適したものを呼び出します。私は答えを更新します。 – zdim

+0

@Bill答えを更新しました。 – zdim

関連する問題