Perl的机械化火狐点击按钮(未在HTML表单)

问题描述:

请考虑下面的代码: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)">中的内容以进行基础分析。

任何帮助将不胜感激。

谢谢!

您不能使用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代码)。