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

标签 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 );

你能帮我找出我犯了什么错误吗?

最佳答案

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

此外,他们通过 JavaScript 设置了一些 cookie,而这些 cookie 不会被 Mechanize 接收。但是,有一个插件WWW::Mechanize::Plugin::JavaScript这可能会帮助你(我没有这方面的经验)。

使用 LiveHTTPHeaders查看浏览器提交的内容并复制它(假设您没有违反他们的 TOS)。

关于perl - 如何使用 Perl 的 WWW::Mechanize 登录和下载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3872676/

相关文章:

python - Mechanize 未正确登录站点

regex - 如何使用 smartmatch 检查字符串是否与数组中的所有模式匹配?

perl - 宽字符和 win32::api

Perl:解释如何工作 "uni::perl"模块 - 加载编译指示和其他模块

vbscript - 如何自动使公用文件夹日历显示在“收藏夹”邮件中

java - 使用 HTMLUnit 以编程方式使用 Java 登录 Facebook

php - 具有用户管理功能的网站的最佳起点

perl - MakeMaker 在 `make` 时间更新其文件列表

Python: Mechanize 错误仅在从文本编辑器运行代码时显示,但在直接从空闲 shell 运行时工作正常

python Mechanize 新页面