2017-03-13 3 views
1

다음 코드를 고려하십시오.Perl 기계화 파이어 폭스 클릭 버튼 (HTML 형식 아님)

웹 페이지에서 분기 별 버튼을 클릭하는 데 도움이 필요합니다.

<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> 

페이지가 처음 연간 데이터를로드,하지만 난 분기 별 데이터에 관심이 있어요 :

#!/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="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을 클릭합니다.

(실제 Perl 코드가 아닌 xpath 표현식 만 테스트했음을 유의하십시오.)