1

我是 Perl 的新手,正在尝试访问一个网站。我已经尝试了我在互联网上找到的这段代码:

use WWW::Mechanize;
use LWP;

my $username = 'user'; 
my $password = 'pass';

chomp($username);
chomp($pass);

my $mech = WWW::Mechanize->new();
$mech->cookie_jar(HTTP::Cookies->new());
$mech->get('http://my_url.com');
$mech->form_name('theform');
$mech->field ('username' => $username);
$mech->field ('password' => $password);
$mech->click('Sign in');

print $mech->content();

按钮是:

<input type="submit" name="sgnBt" title="Sign in" value="Sign in" id="sgnBt" class="btn btn-prim sd-sgnBtn">

输出是:

Error : No clickable input with name Sign in ...

替换行 $mech -> click('Sign in'); with$mech -> submit(); 给了我注册页面,这不是我点击登录按钮后得到的页面。

我也试过:

$mech->click_button(name => 'Sign in');
$mech->click_button(name => 'sgnBt');
$mech->click_button(value => 'Sign in');

但他们都给出了同样的错误。请指教,脑筋急转弯。我已经尝试了很多东西。

4

2 回答 2

1

尝试使用$mech->submit_form()而不是$mech->click_button()

my $fields = {
    username => $username,
    password => $pass
};
my $response = $mech->submit_form( with_fields => $fields );

这将选择页面上包含所有字段的第一个表单$fields并提交页面。这样您就不必知道表单名称或编号或按钮的名称。

您尚未发布表单的完整 HTML,因此我不确定这是否相关,但您也应该知道WWW::Mechanize 不支持 JavaScript。这是一个常见的问题来源。

于 2013-11-07T18:41:16.700 回答
0

我的问题是我不明白我需要先弄清楚表单名称。表单名称是用我尝试解析的 html 编写的。

固定后:

$mech->form_name('Right form name');

这条线对我有用:

$mech -> click('sgnBt');

谢谢大家

于 2013-11-08T08:36:44.077 回答