我对perl很新。我正在学习如何使用Mechanize包。我有示例页面。我不知道它是否有益于学习,因为它以一种奇怪的方式起作用,但我仍然想知道现在发生了什么。
首先,我编写了脚本,它直接在第1页下载内容:
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();
这很好用。 然后我试图从第0页到达这个页面,我写了这个:
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();
mech afeter下面的内容链接看起来没问题(我真的在第1页),但后来我收到错误Can't locate object method "get_frames" via package HTTP:Headers" at (...)/Message.pm line 694"
。我的包列表在两个脚本中都是相同的:
use strict;
use warnings;
use WWW::Mechanize::Frames;
所以我的问题是,我做错了什么?
答案 0 :(得分:2)
根据WWW::Mechanize documentation
$mech->follow_link(...)
返回HTTP :: Response对象,您将此结果分配给变量$mech
。这有效地将$mech
的现有值替换为HTTP :: Response对象。
HTTP :: Response模块没有方法get_frames()
,正如Perl正确地告诉你的那样。
您需要将HTTP响应存储在单独的变量中:
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();