2012-03-22 9 views
0

私はスクリプトをナビゲートして、すべてのコンテンツを取得したいと思うウェブページをたくさん持っています。私はリンクがすべてのページの18番目のリンクであることを知っています。私はテストとして、次のコードは一度だけ、画面のこすりリンクをたどるする必要があります。 Perl、Mechanizeを使用してウェブページをナビゲートする

use strict; 
use WWW::Mechanize; 

my $start = "http://*some-webpage*"; 

my $mech = WWW::Mechanize->new(autocheck => 1); 
$mech->get($start); 
open(Output, ">mech_test.txt") or die $!; 
$mech->follow_link(url_regex => qr//, n => 18); 
print Output $mech->response()->content(); 
close(Output); 

は、残念ながら、私がアクセスしようとしているリンクは、HREFタグには何もありません。ページのソースにリンクを表示すると次のようになります。

<a href="" onclick="return _doClick('CA256D6E001A7020.80376e858b0791b1ca256d7300098304/$Body/0.155A', this, null)">Next &gt;&gt;</a> 

私は、これはjavascriptので、Mechanizeのは、このリンクをたどることができます方法はありません信じています。これを回避するためのアイデアですか?

+1

これは非常に頻繁に繰り返される質問です。 http://stackoverflow.com/search?q=%5Bperl%5D+mechanize+%5Bjavascript%5D http://stackoverflow.com/questions/4767562/is-there-a-way-to-execute-javascript-in- perl http://stackoverflow.com/questions/3769015/how-can-i-handle-javascript-in-a-perl-web-crawler http://stackoverflow.com/questions/6683611/tricking-browser-into- calling-javascript-events – daxim

答えて

-2

JSが非常に単純なら、純粋なperlである可能性があります。

あなたはjavascriptサブルーチンを見つけなければなりません。それが単純であれば、perl subとして再現することができます。

あなたは自分でリンクを構築することができます。

my @javascript_links = $html =~ m#return _doClick\((.*?)\)#gis; 
#array contain 'CA256D6E001A7020.80376e858b0791b1ca256d7300098304/$Body/0.155A', this, null 
my @links = extract_links(@javascript_links); 
foreach my $link (@links){ 
    $mech->get($link) 
} 
#*** 
sub extract_links{ 
my $line = shift; 
my @params = split(/,/,$line); 
trim(@params); 
#mimic JS logic here, whatever it is 
my $link = "/some/path/here/to/add/some.php?someparam1=val1&param=$params[0]"; 
return $link; 

} 
+0

ありがとうございました。これはオプションかもしれませんが、最初にwin32 :: ieautomationを調べます。 – user1249684

+0

私はこの方法を使用しており、私がしたいすべてのことを行うことができます... – user1126070

1

あなたはW3C DOMを使用して、スクリプトのサポートを提供WWW::MechanizeのサブクラスであるWWW::Scripterモジュールを使用する必要があります。

関連する問題