加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:47:34 所属栏目:大数据 来源:网络整理
导读:我是Perl的新手,我正在学习,同时我尝试自动化一些项目的工作.到目前为止它已经很有趣了. 我正在为客户生成报告.我可以从我可以访问的网页上获取此报告. 首先,我需要用我的用户名,密码填写表格,然后从下拉列表中选择一个服务器,然后登录. 其次,我需要单击报告
我是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可以影响我和登录尝试吗?

还有别的我做错了吗?

感谢你的帮助,
的Yaniv

解决方法

这是事后几个月,但我根据我提出的类似问题解决了同样的问题.有关详细信息,请参阅 Is it possible to automate postback from the client side?.

我使用Python的Mechanize而不是Perl,但同样的原则适用.

总结我之前的回应:

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

当普通用户访问时,这些页面上有一个__doPostBack(‘foo’)函数,通过每个链接上的javascript onclick事件为__EVENTTARGET提供相关值,但由于机械化不使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读