Perl Mechanize单击单选按钮

时间:2016-03-07 19:39:03

标签: perl mechanize

我正在尝试使用带有Mechanize模块的Perl单击一个单选按钮。我试过了

$mech->find_all_inputs ( name => "name" , value => "1" ) 

,但无法获得任何结果。单选按钮的html代码就是这样;

<input name="name" value="1" type="radio">

还有其他单选按钮,名称相同但值不同。那么如何使用Mechanize模块单击单选按钮? 提前谢谢。

1 个答案:

答案 0 :(得分:3)

用户代理无法神奇地区分正确的用户代理。找到它们,然后浏览它们并选择你需要的那个。您可以通过possible_values

方法学习数值
# Finding the field name and values for the radio element
foreach ( $ua->find_all_inputs(type => 'radio') ) {
    $radio_name = $_->name;
    say "$radio_name values: " . join('|', $_->possible_values)
}     

如果它只是一个

my ($radio_name, $input_err) = 
    map $_->name, $ua->find_all_inputs(type => 'radio');
warn "More radio inputs than expected: $!" if defined($input_err);

一旦你有了正确的按钮,你就可以填写它所在的表格。例如

$ua->submit_form( fields => { $radio_name => 'AND' });

submit_form&#34; 可让您从之前提取的页面中选择一个表单,填写其字段并提交。&#34; [来自docs,WWW::Mechanize]。它将参数作为哈希值,例如,您可以在其中设置名称和值。此方法是更高级别的包装器,而不是您可以使用更具体的包装器,例如

$ua->field( $name, $value );

要在重复的字段中设置字段,请选择所需字段的编号。例如,要从列表中设置第二个

$ua->set_fields( $name => [ 'field_value', 2 ] )

另请注意,WWW::Mechanize继承了很多。当您搜索正确的调用时,查看它继承的包中的方法可能是个好主意。