我遵循指南
如果要提交文件并从文件系统中的标量而不是文件中获取其内容,可以使用:
$mech->submit_form(with_fields => { logfile => [ [ undef, 'whatever', Content => $content ], 1 ] } );
来自WWW :: Mechanize documentation 的
我提交文件的代码
$mech->submit_form(with_fields =>
{ logfile => [ [ undef, "import_codes.xlsx", Content => $file_dir ], 1 ] });
失败的例外;
Can't call method "value" on an undefined value at /usr/local/share/perl/5.18.2/WWW/Mechanize.pm line 1568.
at /usr/local/share/perl/5.18.2/WWW/Mechanize.pm line 1568.
WWW::Mechanize::set_fields('WWW::Mechanize=HASH(0xf51b040)', 'logfile', 'ARRAY(0xf71e6dc)') called at /usr/local/share/perl/5.18.2/WWW/Mechanize.pm line 1948
WWW::Mechanize::submit_form('WWW::Mechanize=HASH(0xf51b040)', 'form_name', 'inputform', 'fields', 'HASH(0xf71e920)')
第1560行至第1575行的Mechanize.pm的代码片段。
sub set_fields {
my $self = shift;
my %fields = @_;
my $form = $self->current_form or $self->die( 'No form defined' );
while ( my ( $field, $value ) = each %fields ) {
if ( ref $value eq 'ARRAY' ) {
$form->find_input( $field, undef,
$value->[1])->value($value->[0] );
}
else {
$form->value($field => $value);
}
} # while
}
答案 0 :(得分:3)
看起来您在表单中使用了错误的字段名称作为文件输入字段。 (强调我的)。
如果要提交文件并从文件系统中的标量而不是文件中获取其内容,可以使用:
vvvvvvv $mech->submit_form(with_fields => { logfile => [ [ undef, 'whatever', Content => $content ], 1 ] } );
logfile
是您希望放置文件内容的输入字段的name属性。在他们的示例中,它是 logfile ,但是在您的网站上的真实形式中“试图提交它可能是别的东西。
$mech->submit_form
来电$mech->form_with_fields
。该方法的文档说:
如果未找到任何表单,则返回undef。
当它set_fields
时,它将失败,因为返回了undef
。
使用正确的字段名称,它应该可以使用。