我仍在学习 Perl,因此对缺乏技术术语知识和一般新手表示歉意。
我正在尝试编写一个脚本来登录我的课程作品帐户并下载所有文件。我只能停留大约一个小时,直到我必须重新登录,所以我想在一个子程序中进行登录工作,这样取决于我可以调用它并重新登录并继续的时间爬行。我的问题是我希望能够在子程序和主代码之间来回传递浏览器(?关于术语,参见下面的示例会更有意义)。
这是我到目前为止所拥有的,但它不起作用:
use strict;
use WWW::Mechanize;
login();
my $username = 'username';
my $password = 'password';
my $url = 'website url';
my $browser = WWW::Mechanize->new();
my $response = login ($username,$password,$url,$browser);
print $response->content;
sub login {
my ($user,$pass,$url,$browser) = @_;
$browser -> get($url);
$browser -> form_name('theform');
$browser -> field ('username' => $user);
$browser -> field ('password' => $pass);
$browser -> click ('log in');
return $browser;
}
这表示我不能在$browser -> get($url);
. 所以我猜在主代码中初始化浏览器不起作用(因为它没有传递给子程序)是/否?
好的,很酷,然后我尝试在子程序本身中执行以下操作:
use strict;
use WWW::Mechanize;
login();
my $username = 'username';
my $password = 'password';
my $url = 'website url';
my $response = login ($username,$password,$url,$browser);
print $response->content;
sub login {
my ($user,$pass,$url) = @_;
my $browser = WWW::Mechanize->new();
$browser -> get($url);
$browser -> form_name('theform');
$browser -> field ('username' => $user);
$browser -> field ('password' => $pass);
$browser -> click ('log in');
return $browser;
}
这次我收到以下错误消息:“C:/Perl64/lib/HTTP/Response.pm 第 93 行缺少基本参数”
所以,我删除了子程序中的行,直到它工作,并发现它编译时如下所示:
use strict;
use WWW::Mechanize;
login();
my $username = 'username';
my $password = 'password';
my $url = 'website url';
my $response = login ($username,$password,$url,$browser);
print $response->content;
sub login {
my ($user,$pass,$url) = @_;
my $browser = WWW::Mechanize->new();
# $browser -> get($url);
# $browser -> form_name('theform');
# $browser -> field ('username' => $user);
# $browser -> field ('password' => $pass);
# $browser -> click ('log in');
return $browser;
}
但它显然只是返回垃圾。
我认为问题在于,正如我所说,试图将浏览器对象传递给子例程,因为我不认为它只是一个标量(因为我可以从中获取“内容”之类的东西),但我实际上真的没有把握。我也很困惑,因为当我在子程序中初始化它时,我仍然遇到问题!!!??????我还尝试使 $browser 成为全局变量,但是在两个代码中都出现了相同的错误。显然我在这里遗漏了一些东西。
在此先感谢所有通过它的人,我知道这有点啰嗦,因为可能是一个非常简单的答案,但我缺乏经验。