如何使用Perl的WWW :: Mechanize登录和下载文件?

时间:2010-10-06 13:02:35

标签: perl mechanize login-script

我正在尝试使用Perl的WWW :: Mechanize来下载文件。我必须先登录网站,然后在验证表格后下载文件。

事情是,经过几个小时后,我没有成功做我想做的事。最后,脚本保存的文件不是zip文件,而是一个没有任何趣味的html文件。

以下是我完成的脚本:

use WWW::Mechanize;
use Crypt::SSLeay;

my $login = "MyMail";
my $password = "MyLogin";
my $url = 'http://www.lemonde.fr/journalelectronique/donnees/protege/20101002/Le_Monde_20101002.zip';

$bot = WWW::Mechanize->new();
$bot->cookie_jar(
    HTTP::Cookies->new(
        file           => "cookies.txt",
        autosave       => 1,
        ignore_discard => 1,
    )
);

$response = $bot->get($url);

$bot->form_name("formulaire");
$bot->field('login', $login);
$bot->field('password', $password);
$bot->submit();

$response = $bot->get($url);
my $filename = $response->filename;

if (! open ( FOUT, ">$filename" ) ) {
    die("Could not create file: $!" );
}
print( FOUT $bot->response->content() );
close( FOUT );

你能帮我找一下我做过的错误吗?

2 个答案:

答案 0 :(得分:3)

当您使用浏览器导航到下载而不是直接使用URL时,我假设有一些隐藏的输入字段。

此外,他们正在通过JavaScript设置一些cookie,而Mechanize将不会选择这些cookie。但是,有一个插件WWW::Mechanize::Plugin::JavaScript可以帮助你(我没有经验)。

使用LiveHTTPHeaders查看浏览器提交的内容并进行复制(假设您没有违反其服务条款)。

答案 1 :(得分:-4)

您提到的问题在Mechanize中是众所周知的。最简单的解决方案是使用Raspo库。