如何使用Perl下载需要代码确认的文件



我刚开始学习一些基于Perl的web应用程序,然而,我遇到了一个问题,我试图编写一个Perl脚本来下载一个文件,该文件需要在下载之前输入一个代码。例如,请参阅此url:http://epaper.dfdaily.com/dfzb/page/1/2013-08/17/A01/20130817A01_pdf.pdf.

我试着在谷歌上搜索,我选择使用WWW::机械化,如下代码所示,但我无法获得文件。有人能帮我吗?非常感谢!!

我的代码在这里:(我想已经得到了正确的代码并将其存储到$code):

my $mech = WWW::Mechanize -> new();
$mech -> get($url);
$mech -> submit_form(
         form_number => 0,
         fields => {checkCode => $code}
     );
print $mech -> content;

这是演示如何做到这一点的示例代码。该代码将在programs目录中创建captcha.jpg文件,以便您可以检查它并在之后输入captcha:

use strict;
use warnings;
use FindBin qw($Bin);
#use HTML::TreeBuilder::XPath;
use WWW::Mechanize;
my $mech = WWW::Mechanize->new();
$mech->agent_alias("Windows IE 6");
$mech->get(
    "http://epaper.dfdaily.com/dfzb/page/1/2013-08/17/A01/20130817A01_pdf.pdf");
#you don't need commented code
#because CAPTCHA URL is always the same for this site
#my $tree = HTML::TreeBuilder->new_from_content( $mech->content() );
#my ($src) = $tree->findvalues('//img[@id="checkcode"]');
$mech->get("http://203.156.244.168:9000/validatecodegen");
open my $fh, ">:raw", "$Bin/captcha.jpg" or die $!;
print {$fh} $mech->content();
close $fh;
$mech->back();
print "Input CAPTCHA: ";
my $code = <>;
chomp $code;
$mech->submit_form(
    with_fields => {
        checkCode => $code,
    },
    button => "Submit",
);
$mech->save_content("$Bin/result.pdf");

最新更新