gpt4 book ai didi

perl - 如何使用和调试 WWW::Mechanize?

转载 作者:行者123 更新时间:2023-12-04 17:14:09 25 4
gpt4 key购买 nike

我对 Perl 很陌生,我在尝试自动化一些工作项目时正在学习。到目前为止,它一直很有趣。

我正在为客户生成报告。我可以从我可以访问的网页上获取此报告。
首先,我需要用我的用户名、密码填写表格,然后从下拉列表中选择一个服务器,然后登录。
其次,我需要单击报告部分的链接。
第三个需要填写表格来创建报告。

这是我到目前为止所写的内容:

my $mech = WWW::Mechanize->new();
my $url = 'http://X.X.X.X/Console/login/login.aspx';

$mech->get( $url );

$mech->submit_form(
form_number => 1,
fields =>{
'ctl00$ctl00$cphVeriCentre$cphLogin$txtUser' => 'someone',
'ctl00$ctl00$cphVeriCentre$cphLogin$txtPW' => '12345',
'ctl00$ctl00$cphVeriCentre$cphLogin$ddlServers' => 'Live',
button => 'Sign-In'
},
);
die unless ($mech->success);

$mech->dump_forms();

我不明白为什么,但是,在此之后,我查看了转储输出的内容,并看到了第一个登录页面的代码,而我相信我应该在成功登录后到达下一个页面。

cookie 中的某些东西会影响我和登录尝试吗?

还有什么我做错了吗?

感谢您的帮助,
亚尼夫

最佳答案

这是事后几个月,但我根据我提出的类似问题解决了同样的问题。见 Is it possible to automate postback from the client side?了解更多信息。

我使用 Python 的 Mechanize 或 Perl,但同样的原则适用。

总结一下我之前的回答:

ASP.NET 页面在表单中需要一个名为__EVENTTARGET 的隐藏参数,正常使用mechanize 时该参数不会存在。

当普通用户访问时,这些页面上有一个 __doPostBack('foo') 函数,它通过每个链接上的 javascript onclick 事件为 __EVENTTARGET 提供相关值,但由于 mechanize 不使用 javascript,您将需要自己设置这些值。

python 解决方案在下面,但让它适应 perl 应该不会太难。

def add_event_target(form, target):
#Creates a new __EVENTTARGET control and adds the value specified
#.NET doesn't generate this in mechanize for some reason -- suspect maybe is
#normally generated by javascript or some useragent thing?
form.new_control('hidden','__EVENTTARGET',attrs = dict(name='__EVENTTARGET'))
form.set_all_readonly(False)
form["__EVENTTARGET"] = target

关于perl - 如何使用和调试 WWW::Mechanize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/968722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com