我正在遵循指导方针
如果要提交文件并从标量而不是文件系统中获取其内容,可以使用:
$mech->submit_form(with_fields => { logfile => [ [ undef, 'whatever', Content => $content ], 1 ] } );来自WWW::机械化文档
我提交文件的代码
$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
}发布于 2016-10-05 13:10:03
看起来您对表单中的文件输入字段使用了错误的字段名。(强调我的)。
如果要提交文件并从标量而不是文件系统中获取其内容,可以使用: vvvvvvv $mech->submit_form(with_fields => { logfile => [ undef,‘form’,Content => $content,1]} );
该logfile是要将文件内容放在其中的输入字段的name属性。在他们的例子中,这是日志文件,但在你真正的网站上,你想要提交的很可能是其他的东西。
$mech->submit_form打电话给$mech->form_with_fields。该方法的文档说:
如果没有找到窗体,则返回undef。
当它执行set_fields时,它将失败,因为返回了undef。
使用正确的字段名,它应该可以工作。
https://stackoverflow.com/questions/39874615
复制相似问题