2017-06-29 204 views
-2

我正在写一个简单的代码来登录到网站进行学习。WWW ::机械化Perl

我得到一个错误说“不表定义”

我怎么知道表单名?

下面是代码片断(我从这个论坛发现它)。

use strict; 
use warnings; 

use WWW::Mechanize; 
use HTTP::Cookies; 

my $mech = WWW::Mechanize->new(); 
my $url = "http://www.something.net"; 

$mech->cookie_jar->set_cookie(0,"start",1,"/",".something.net"); 
$mech->get($url); 
$mech->form_name("frmLogin"); 
$mech->set_fields(user=>'user',passwrd=>'password'); 
$mech->click(); 
$mech->save_content("logged_in.html"); 

代码看起来好吗?

+0

是的,正如前面所说,我从有人在这个论坛得到这个代码。但我无法使它工作。它说,当我执行时,“表单是未定义的”!表单名称'frmLogin'是通用名称,可以在任何地方使用? – zack

+0

这与perl有关,与图书馆/网址目标详情有关。 –

回答

2

表单的名称(如果有)嵌入到您正在检索的内容中。例如,如果您查看此页面的源代码,您会发现很多form元素。这其中有ID add-comment-44827103

<form id="add-comment-44827103" 
     class="" 
     data-placeholdertext="Use comments to ask for more information or suggest improvements. Avoid answering questions in comments."></form> 

你可以用$mech->forms检索。此调用返回可以进一步询问的对象列表HTML::Form

my ($form) = $mech->forms; # note ($var)=... for list context 
my $form_id = $form->attr("id") || die "form on page doesn't have 'id' attr"; 
$mech->form_id($form_id); 
... 

也有$mech->form_number(index)呼叫

$mech->form_number(2);  # select the 2nd form on the page 
+0

你是对的,但是OP询问'name'属性中的form * name *。 – Borodin