2017-02-22 22 views
0

Я выполняю проект для клиента, и он должен иметь возможность подметать оглавление на определенной странице. Я изменил его существующий код, чтобы запустить цикл, поскольку теперь есть несколько страниц для извлечения контента. Одна из страниц, которую я пытаюсь выполнить от: https://marriage.ag.gov.au/marriagecelebrants/civilAJAX нажмите кнопку, используя Perl WWW: Mechanize

Вы можете увидеть 162 страницы, которые, похоже, работают на AJAX для загрузки следующей партии контента. Существующий код щелкнет на основе имени атрибута ввода:

ctl00 $ MainContent $ gridCelebrants $ ctl00 $ ctl02 $ ctl00 $ ctl04 до сих пор все мой код делает существенно обновить страницу и сметает то же самое содержание 162 раз.

Это текущий фрагмент:

use warnings; 
use WWW::Mechanize; 
use Data::Dumper; 
use HTML::TableExtract; 
use Spreadsheet::WriteExcel; 

#header(); 
# create max page array to handle civil and other page. 
# number indicates how many times to click through 
# first item in array is https://marriage.ag.gov.au/marriagecelebrants/civil 
# second item is   https://marriage.ag.gov.au/marriagecelebrants/other 
my @max_page_array = qw(
    162 
    11 
); 

# create URL array for the 2 pages to scrape 
my @url_array = qw(
    https://marriage.ag.gov.au/marriagecelebrants/civil 
    https://marriage.ag.gov.au/marriagecelebrants/other 
); 
# get size of array 
my $url_array_size = scalar @url_array; 

# declare vars 
my $n = 0; 
my $i = 0; 
# time to loop through the url's 
while($i < $url_array_size){ 
    open (raw, ">output-dev-$i.txt"); 
    close(raw); 
    $n = 0; 
    my $mech = WWW::Mechanize->new(autocheck => 1); 
    $mech->get($url_array[$i]); 

    open (raw, ">>output-dev-$i.txt"); 
    while($n < $max_page_array[$i]){ 
     my $c = $mech->content; 
     my $te = HTML::TableExtract->new(br_translate => 1,keep_html => 0); 
     $te->parse($c); 
     foreach my $ts ($te->tables) { 
      foreach my $row ($ts->rows) { 
       print raw join(',', @$row); 
      } 
     } 

     #this was existing code 
     #$mech->click("ctl00\$MainContent\$gridCelebrants\$ctl00\$ctl02\$ctl00\$ctl04"); 

     #tried multiple variations based on documentation and got nowhere 
     $mech->click_button('ctl00$MainContent$gridCelebrants$ctl00$ctl02$ctl00$ctl04'); 
     $n++; 
    } 
    close raw; 
    $i++; 
} # while loop - url array size 

Мой вопрос, когда вы щелкаете дальше, как я могу получить мой Perl скрипт, чтобы загрузить следующую страницу и подметать следующий набор данных?

ответ

0

Мой вопрос: когда вы нажмете следующий, как я могу заставить свой скрипт perl загрузить следующую страницу и выполнить следующий набор данных?

WWW::Mechanize не поддерживает JavaScript, согласно the FAQ. Он предоставляет list of alternatives, которые делают, см. Также WWW::Mechanize::PhantomJS.