如何在网站上处理无名表格?

can*_*nin 0 forms perl automation web

我想写一个让我使用这个网站的脚本

http://proteinmodel.org/AS2TS/LGA/lga.html

(我需要使用它几百次,我不想手动这样做)

我已经在互联网上搜索了如何使用Perl完成这项工作,我遇到了WWW::Mechanize,这似乎正是我所寻找的.但是现在我发现我想要使用的网站上的表单没有名称 - 它的声明行只是读取

<FORM METHOD="POST" ACTION="./lga-form.cgi" ENCTYPE=multipart/form-data>
Run Code Online (Sandbox Code Playgroud)

起初我尝试简单地不设置我的WWW::Mechanize对象的form_name属性,当我为表单的电子邮件地址字段提供值时,它给了我这个错误消息:

Argument "my_email@address.com" isn't numeric in numeric gt (>) at /usr/share/perl5/WWW/Mechanize.pm line 1618.
Run Code Online (Sandbox Code Playgroud)

然后我尝试设置form_name''以后' ',但它没有用,我只是得到这个消息:

There is no form named " " at ./automate_LGA.pl line 40
Run Code Online (Sandbox Code Playgroud)

有什么方法可以处理没有名字的表格?如果有人在这里可以回答这个问题,那将是最有帮助的 - 即使答案指向不使用WWW::Mechanize,因为我只是想完成工作,(或多或少)无论如何.

非常感谢提前!

Dav*_*ous 6

一种简单而且更健壮的方法是使用WWW :: Mechanize中$ mech-> form_with_fields()方法根据它包含的字段选择所需的表单.

更容易,使用submit_formwith_fields选项的方法.

例如,要找到一个包含名为"username"和"password"字段的表单,请完成它们并提交表单,它就像以下一样简单:

$mech->submit_form( 
    with_fields => { username => $username, password => $password }
);
Run Code Online (Sandbox Code Playgroud)

这样做的好处是,如果他们将HTML改变,改变HTML中表单的顺序,或者在您感兴趣的表单之前添加新表单,您的代码将继续工作.