【发布时间】: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-wand$^W -
只要你使用单引号——你已经这样做了——Perl 可以处理任何字符,除了另一个单引号
'或反斜杠\`. You don't say which is line 599, but unless you have other calls tovalue, 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