2014-06-13 2 views
0

나는 perl에 매우 익숙합니다. 나는 Mechanize 패키지를 사용하는 방법을 배제하고있다. 예제 페이지가 있습니다. 나는 그것이 이상한 방법으로 작동하지만 아직, 나는 지금 일어나고있는 일을 이해하기를 원한다는 것을 배우는 것이 좋을지 모르겠다.Perl이 잘못된 패키지를 사용하려고 시도했습니다.

첫째, 내가 PAGE1에서 직접 콘텐츠를지고 스크립트를 작성했습니다 :

my $mech = WWW::Mechanize::Frames-> new(); 
my $mechFr = WWW::Mechanize::Frames-> new(); 
my $url="page1 url"; 

$mech->get($url); 

my @frames = $mech->get_frames(); 
$mechFr= $frames[0]; 
print $mechFr->content(); 

을 그리고 이것은 잘 작동합니다. 그럼 내가 page0에서이 페이지를 얻으려고 노력하고 있었고, 난이 쓴 : 링크를하면 괜찮아 보이는 afeter MECH에서

my $mech = WWW::Mechanize::Frames-> new(); 
my $mechFr = WWW::Mechanize::Frames-> new(); 
my $url="page0url"; 

$mech->get($url); 
$mech=$mech->follow_link(text_regex => qr/page1like/); 
print $mech->content(); 

my @frames = $mech->get_frames(); 
$mechFr= $frames[0]; 
print $mechFr->content(); 

콘텐츠 (난 정말 PAGE1 오전),하지만 난 오류 Can't locate object method "get_frames" via package HTTP:Headers" at (...)/Message.pm line 694"를 얻을. 내 패키지 목록은 두 스크립트에서 동일합니다.

use strict; 
use warnings; 
use WWW::Mechanize::Frames; 

제 질문은 무엇이 잘못 되었습니까?

+1

'$ MECH = $ MECH => follow_link()'를 깨고 무엇 :

당신은 별도의 변수에 HTTP 응답을 저장해야합니다. 너 원래의 $ mech을 clobbering하고있어. – Sobrique

답변

2

WWW::Mechanize documentation에 따르면 $mech->follow_link(...)은 HTTP :: Response 개체를 반환하고이 결과를 변수 $mech에 할당합니다. 이렇게하면 $mech의 기존 값이 HTTP :: Response 개체로 바뀝니다.

HTTP :: Response 모듈에는 Perl이 올바르게 알려주는 방법 get_frames()이 없습니다.

my $mech = WWW::Mechanize::Frames-> new(); 
my $mechFr = WWW::Mechanize::Frames-> new(); 
my $url="page0url"; 

$mech->get($url); 
my $http_response = $mech->follow_link(text_regex => qr/page1like/); 
print $http_response->content(); 

my @frames = $mech->get_frames(); 
$mechFr= $frames[0]; 
print $mechFr->content(); 
+0

감사합니다. 나는이 문서를보고 simmilar 것을 시도했다, 나는 내가 그 시간에 다른 잘못된 것을했다고 생각한다. 고맙습니다! – kamila

+1

더 나은 :'$ mech-> follow_link (...); print $ mech-> content();' – ikegami

+0

내부적으로 HTTP :: Response를 저장합니까? 나는'WWW :: Mechanize'에 익숙하지 않다. –

관련 문제