Нажмите кнопку Perl Mechanize Firefox (не в форме 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>

Страница изначально загружает годовые данные, но меня интересуют квартальные данные.

После того, как ежеквартальные данные загружены, мне нужно зафиксировать содержимое таблицы <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)"> для фундаментального анализа.

Любая помощь будет принята с благодарностью.

Спасибо!


person Brian Douglas    schedule 13.03.2017    source источник


Ответы (1)


Вы не можете использовать 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).

person simbabque    schedule 13.03.2017