用LWP和HTTP :: Request :: Form填写表单有什么问题?

时间:2011-08-01 15:47:51

标签: perl lwp lwp-useragent

我是Perl的新手,目前正在编写一个Perl脚本来自动填充Web表单并使用LWP提交它们。网站网址为***/something.cgi,在该文档中有一个我需要填写的表单,然后点击提交。这会将我带到另一个页面,其中有另一个表单需要填写,但网站的URL保持不变。

我设法填写第一张表格并使用以下方式提交:

$res = $ua->request($f->press("submit"));

,其中

my $f = HTTP::Request::Form->new($forms[0], $url);

查看$res->as_string会显示下一页的来源,但尝试获取新表单以填充它,但它给了我与我已有的相同的表单。我如何获得下一页以填写表格并继续?

2 个答案:

答案 0 :(得分:2)

我建议您查看WWW::Mechanize及其form methods,它是LWP::UserAgent的子类。

修改

根据我的第一个链接中的示例紧密添加示例:

use strict;
use warnings;

use WWW::Mechanize;
my $mech = WWW::Mechanize->new();

$mech->get( 'http://google.com' );
sleep 1; ## be nice

$mech->submit_form(
    form_number => 0,
    fields      => {
        q       => 'mungo',
    }
);

print $mech->content;

答案 1 :(得分:0)

您尝试编写脚本的表单必须使用某个参数或Cookie来确定要处理的多页表单的哪个页面。查看

中返回的cookie
print $res->header();

查看是否为您需要传回的会话ID或其他参数设置了Cookie。

另外,查看第一个表单页面与第二个表单页面的来源,看看是否有隐藏的输入类型表明第二个表单是第二个表单页面。或者,查看提交按钮标记的值,可能在第二页上有所不同。