【问题标题】:How can I access forms without a name or id with Perl's WWW::Mechanize?如何使用 Perl 的 WWW::Mechanize 访问没有名称或 ID 的表单?
【发布时间】:2011-01-16 15:55:35
【问题描述】:

我的 Perl 程序有问题。该程序登录到特定的网页,并填写消息的文本区域和手机号码的输入框。单击“发送”按钮后,消息将发送到指定号码。我已经让它用于发送消息。但问题是我无法让它用于接收消息/回复。我在 Perl 中使用WWW::Mechanize 模块。这是我的代码的一部分(用于接收消息):

$username = 'suezy';
$password = '123';
$url = 'http://..sample.cgi';

# ...

$mech->credentials($username, $password);  
$mech->get($url);

$mech->submit(); 

我的问题是,表格没有显示名称。此表单中有两个按钮,但我无法选择单击哪个按钮,因为没有指定名称并且 ids 包含空格(例如 form name='receive msg'..) .我需要点击第二个按钮“接收”。

问题是,如何在不使用名称的情况下使用 mechanize 模块访问表单和按钮?

【问题讨论】:

    标签: perl www-mechanize


    【解决方案1】:

    您可以将 form_number 参数传递给 submit_form 方法。

    或调用 form_number 方法来影响以后调用单击或字段时使用哪个表单。

    【讨论】:

    • 谢谢!但是如何访问按钮呢?
    • 你是怎么做到的?你的例子显示了提交,所以我建议 submit_form(form_number => xxx) 代替;如果您使用的是 click 或 click_button,我建议您事先调用 form_number 方法。
    【解决方案2】:

    您是否尝试过使用HTTP Recorder
    查看文档并尝试查看它是否为您提供了合理的结果。

    【讨论】:

    • 我又有一个问题,请问如何使用 Mechanize 启用单选按钮?
    • 使用 HTTP Recorder 的想法是查看生成的脚本 - 然后您可以看到实际发送的内容。
      我想它应该像 $mech->set_visible( [ radio = > 'KCRW' ] );在您记录的代码中。
    【解决方案3】:

    看到你的表单上只有两个按钮,ysth的建议应该很容易实现。

    use strict;
    use warnings;
    use WWW::Mechanize;
    
    my $username = "suezy";
    my $password = "123";
    my $url = 'http://.../sample.cgi';
    my $mech = WWW::Mechanize->new();
    
    $mech->get($url);
    $mech->credentials($username,$password);
    

    然后:

    $mech->click_button({number => 1});       # if the 'Receive' button is 1
    

    或者:

    $mech->click_button({number => 2});       # if the 'Receive' button is 2
    

    反复试验足以让您确定您正在单击哪个按钮。

    编辑

    我假设相关表单已经被选中。如果没有:

    $mech->form_number($formNumber);
    

    其中$formNumber 是相关页面上的表单编号。

    【讨论】:

    • click_button 数字是(根据文档,无论如何)相对于当前表单;您必须先致电 form_number。
    • 非常感谢你们的帮助!没错,扎伊德,这应该是一个反复试验..这是一个好的开始。 :)
    • 我又有一个问题,请问如何使用 Mechanize 启用单选按钮?
    • @Suezy:看到它不是你原来帖子的一部分,你为什么不把它作为一个新问题发布?
    【解决方案4】:

    $mech->form_with_fields('username');

    将选择包含名为 username 的字段的表单。 hth

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 2013-07-12
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多