WWW::Mechanize: 如何根据表单中的编号单击按钮

WWW::Mechanize: How To Click Button Based On Its Number in Form

网站上有一个表单末尾的按钮,我似乎无法使用 WWW::Mechanize 单击该按钮。这是与此按钮有关的 HTML 的位:

<input type="submit" class="saveButton" value="Login">

当我 print $mech->find_all_inputs(); 时,我得到 return 这个:

HTML::Form::TextInput=HASH(0x7f8f52cdc450)
HTML::Form::TextInput=HASH(0x7f8f5302b488)
HTML::Form::SubmitInput=HASH(0x7f8f52cdc108)

第三个是我要点击的那个。我不确定如何单击此按钮,即使我找到了它。我尝试了 click(field(n => 3)),我尝试将变量 $submit 分配给 find_all_inputs(3),然后 click($submit);,无论如何,这个按钮都没有被点击。

谁能指导我如何点击这个难以捉摸的按钮?

Edit (after question answered)

查询 HTML 表单发现我实际上是在表单的 'Forgot my Password' 字段中输入登录密码。为什么这个字段没有出现在 $mech->find_all_inputs() 上,我不知道 "Login" 出现了。无论哪种方式,单击按钮都会将我带到下一页。谢谢!

您是否尝试先 select 适当的表格,然后调用 click?它说(我的重点)

Has the effect of clicking a button on the current form.

在页面上找到您需要的表格。假设它是 2 号表格。

# $ua is the User Agent (Mechanize object), at the appropriate page
$ua->form_number(2);
# fill the form ...
my $response = $ua->click();

$ua->submit_form( 
    form_number => 2, 
    # fields => { name => $value }  # can fill it here as well
};

我发现 click 总体上可能更可靠。

要检查您可以使用的表格 my @forms = $ua->forms。例如,要填写表格,您可以使用 selectset_fields。请参阅 Form Methods and Field Methods. All this operates with HTML::Form 个对象,以便您也可以使用它的方法。例如,value_namespossible_values 很方便。

如果这没有帮助,请给我们更多详细信息 -- 有问题的网页将是理想的。

由于是表单中的第一个按钮,可以这么写

$mech->click_button( n => 1 )

或者,因为它的 value 属性是 Login,你可以这样做

$mech->click_button( value => 'Login' )

但由于它是表单中唯一的按钮,所以

$mech->click

应该可以正常工作