【问题标题】:Unable to supply complex form values using WWW::Mechanize无法使用 WWW::Mechanize 提供复杂的表单值
【发布时间】:2014-12-22 01:10:34
【问题描述】:

我有一个要使用WWW::Mechanize 模块处理的HTML 表单。似乎我无法发布包含美元符号$ 的输入值。我收到此运行时错误消息:

Can't call method "value" on an undefined value at script.pl line 599

我的脚本是这样的

my $agent = WWW::Mechanize->new( autocheck => 1, ssl_opts => { verify_hostname => 0 }, );
my $formfiller = WWW::Mechanize::FormFiller->new();

$agent->env_proxy();
$agent->get('https://site.com/form.php');
$agent->form_number(1) if $agent->forms and scalar @{$agent->forms};
$agent->form_number(1);

{
  local $^W;
  $agent->current_form->value('page_contentleft_0$form_D69D9E5239FC412ABB92A81D73F690AD$field_F40A1785D7B3490CBD5E72EDBE6B966D', 'John Doe');
}; #// First NAme
{
  local $^W;
  $agent->current_form->value('page_contentleft_0$form_D69D9E5239FC412ABB92A81D73F690AD$field_E3316C46A4404C73ACBAE107DF6206D2', 'Bridgeport');
}; #// City
{
  local $^W;
  $agent->current_form->value('page_contentleft_0$form_D69D9E5239FC412ABB92A81D73F690AD$field_E5747EB507E74DC1937557F9285CB57C', 'CT');
}; #// state
{
  local $^W;
  $agent->current_form->value('page_contentleft_0$form_D69D9E5239FC412ABB92A81D73F690AD$field_A612569BE44C4BA3AD0AB3FBF8FB0553', '06604');
}; #// Zipcode

$agent->submit(Submit);

据我所知,问题出在value方法的参数上,例如

page_contentleft_0$form_D69D9E5239FC412ABB92A81D73F690AD$field_A612569BE44C4BA3AD0AB3FBF8FB0553

我怎样才能让 Perl 通过$,或者以其他方式修复它?

【问题讨论】:

  • 将$^W 设置为undef 有点极端。如果您收到可以合理忽略的警告,那么您应该写no warnings 'category'。见What's wrong with -w and $^W
  • 只要你使用单引号——你已经这样做了——Perl 可以处理任何字符,除了另一个单引号 ' 或反斜杠 \`. You don't say which is line 599, but unless you have other calls to value, the problem is that $agent- >current_form` 未定义。由于您刚刚使用$agent->form_number(1) 设置了当前表单,因此当前 HTML 页面必须不包含任何表单。
  • 第 599 行是 $agent->current_form->value('page_contentleft_0$form_D69D9E5239FC412ABB92A81D73F690AD$field_F40A1785D7B3490CBD5E72EDBE6B966D', 'John Doe'); }; #// 名字 {

标签: perl perl-module www-mechanize


【解决方案1】:

你确定有吗?

$agent->submit(Submit);

试试这个代码:

           $agent->get('https://site.com/form.php');

           $agent->submit_form(
     with_fields => {
'page_contentleft_0$form_D69D9E5239FC412ABB92A81D73F690AD$field_F40A1785D7B3490CBD5E72EDBE6B966D' => 'John Doe', 
'page_contentleft_0$form_D69D9E5239FC412ABB92A81D73F690AD$field_E3316C46A4404C73ACBAE107DF6206D2' => 'Bridgeport',     
'page_contentleft_0$form_D69D9E5239FC412ABB92A81D73F690AD$field_E5747EB507E74DC1937557F9285CB57C' => 'CT',     
'page_contentleft_0$form_D69D9E5239FC412ABB92A81D73F690AD$field_A612569BE44C4BA3AD0AB3FBF8FB0553' => '06604'},
           button => "Submit",);

【讨论】:

  • 感谢您的回答!但是我仍然收到一条错误消息:script.pl 第 642 行的语法错误,靠近“};” script.pl 第 643 行,“,)”附近的语法错误 由于编译错误,script.pl 的执行中止。 ////////// 请看看这个:pastebin.com/WGQfJ5tU
  • 你打错了:''.$var4.''}; 必须是$var4},
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 2010-12-16
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多