2012-03-22 1 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> 

나는 이것이 자바 스크립트이며 기계화가이 링크를 따라갈 수 없다고 생각합니다. 이 문제를 해결할 수있는 아이디어가 있습니까?

+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가 아주 간단한 경우에는 순수한 펄 일 수 있습니다.

당신은 자바 스크립트 서브 루틴을 찾아야 만하고, 매우 간단하다면 펄 서브로 재현 할 수 있습니다.

그러면 링크를 직접 만들 수 있습니다.

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 모듈을 사용해야합니다.