2017-03-13 84 views
1

請考慮下面的代碼:Perl的機械化火狐點擊按鈕(未在HTML表單)

我需要幫助單擊按鈕季度在網頁上。

#!/usr/bin/perl 
use strict; 
use WWW::Mechanize::Firefox; 

my $mech = WWW::Mechanize::Firefox-> 
    new 
     (
      create  => 1, 
      activate => 1, 
      launch  => 'c:\Program Files (x86)\Mozilla Firefox\firefox.exe', 
     ); 

my $url = 'http://finance.yahoo.com/quote/AAPL/financials?p=AAPL'; 

$mech->get($url); 

for (1..15) 
{ 
    last if $mech->xpath('//[@class="Fl(end)"]', all => 1); 
    sleep(1); 
} 

$mech->click_button(value => 'Quarterly'); 

該按鈕位於:

<div class="Fl(end)" data-reactid="319"> 
    <button class="P(0px) M(0px) C($actionBlue) Bd(0px) O(n)"> 
     <div class="Fz(s) Fw(500) D(ib) Pend(15px) H(18px) C($finDarkLink):h Mend(15px) BdEnd Bdc($subTabNavGray) C($actionBlue)"> 
      <span>Annual</span> 
     </div> 
    </button> 
    <div class="Fz(s) Fw(500) D(ib) Pend(15px) H(18px) C($finDarkLink):h Mend(15px) C($finDarkLink)"> 
     <span>Quarterly</span> 
    </div> 
</div> 

該頁面最初加載年度數據,但我感興趣的季度數據。

加載Quarterly數據後,我有興趣捕獲表格<div class="Mt(10px)"><table class="Lh(1.7) W(100%) M(0)"><tbody><tr class="Bdbw(1px) Bdbc($lightGray) Bdbs(s) H(36px)"><td class="Fw(b) Fz(15px)">中的內容以進行基礎分析。

任何幫助將不勝感激。

謝謝!

回答

0

您不能使用click_button來點擊不在表單中的內容。相反,您需要使用click。要獲得正確的按鈕,我們可以使用xpath表達式。

$mech->click({ xpath => '//button[.//span[text()="Quarterly"]]' }); 

該表達式看起來很複雜,但並不那麼糟糕。

//button[.//span[text()="Quarterly"]] 
//button        # the button element anywhere in the page 
     [       ] # that contains 
     .       # relative to it's position 
      //span      # a span element 
       [     ] # that contains 
       text()=    # a text node 
         "Quarterly" # with the exact string "Quarterly" 

它會給你那一個按鈕,click會點擊它。

(請注意,我只測試了xpath表達式,而不是實際的Perl代碼)。