Perl尝试使用错误的包

时间:2014-06-13 12:58:24

标签: perl www-mechanize

我对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;

所以我的问题是,我做错了什么?

1 个答案:

答案 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();