首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能用Perl中的WWW::Mechanize::Firefox提交我的表单呢?

为什么我不能用Perl中的WWW::Mechanize::Firefox提交我的表单呢?
EN

Stack Overflow用户
提问于 2013-01-15 20:08:43
回答 1查看 1.3K关注 0票数 1

我有一个HTML,这是我正在处理的表单的一部分

代码语言:javascript
复制
<form action="/goform/FormUpdateVAP" autocomplete="off" name="myform" id="formid" method="POST">
<table>
    <tbody>             
            <tr>
                <td align="right"><span class="label">Name:</span></td>
                <td><input id="essid" name="essid"  value="X" type="text"></td>
            </tr>
            <tr>
                <td align="right"><input id="broadcast_essid" name="broadcast_essid" value="any" checked="" type="checkbox"></td>
                <td><span class="label">Broadcast name:</span></td>
            </tr>
    </tbody>
</table>
<!-- BEGIN RIGHT COLUMN -->
<table>
    <tbody><tr>
        <td>
            <input name="authentication" id="authentication" value="any" onclick="Update();" type="checkbox"><span class="label"><b>authentication</b></span>
        </td>
        <td>
            <input onclick="Update();" name="wp" id="wp" value="any" type="checkbox"><span class="label"><b>Wp</b></span>
            <select id="8021x_mode" name="8021x_mode" onchange="Update();"><option value="wpa">WPA</option>
            <option value="wep">WEP</option>
            </select>
        </td>

    </tr>
    <tr>
        <td height="26">&nbsp;
            <input onclick="Update();" name="w_p" id="w_p" value="any" type="checkbox"><span class="label"><b>Wp</b></span>
            <select id="8021x_mode" name="8021x_mode" onchange="Update();"><option value="wpa">WPA</option>
            <option value="wep">WEP</option>
            </select>
        </td>
    </tr>
    <tr>
    <td>
        <input id="cancel" name="cancel" value="Cancel" onclick="window.location.href = '/fg/list.asp';" type="button">

    </td>
    <td>
        <input id="add-2" name="add" value="Save" type="submit">
    </td>
</tr>
</tbody>
</table>

我正试着提交它,填写名字和广播名称。并检查8021x_modewp复选框。如果我勾选8021x_mode并设置字段,表单就会提交得很好。但是,当我尝试勾选wp时,它不会提交。我没有错误信息。到目前为止,这是我的代码:

代码语言:javascript
复制
use WWW::Mechanize::Firefox;
use Crypt::SSLeay;
use URI::Fetch;
use HTML::TagParser;
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME}=0; #not verifying certificate

my $url = 'https://';
$url = $url.@ARGV[0]; 
my $mech = WWW::Mechanize::Firefox->new;
$mech->get($url);

$mech->form_id('formid');
$mech->tick( '8021x_mode','any'); 
$mech->tick( 'wp','any'); --after I add this the form doesn't submit
my $name = @ARGV[1];

$mech->set_fields(
    'vap_name' => $name, 
    'essid' => $name,
);
$mech->click_button( id => 'add-2' );
$mech->reload();

add-2是提交按钮.知道为什么不起作用吗?如果您需要更多的信息,请让我现在。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-15 20:48:41

问题是html不包含用于any的选择8021x_mode。

我知道这个错误:

在8021x_mode第24行没有为复选框找到名称为“test.pl”和值“any”的元素。

要检查表单,我建议您使用mech-dump实用程序(与WWW::Mechanize一起安装)。

代码语言:javascript
复制
$ mech-dump --forms http://domain.tld/path_to_forms
POST /goform/FormUpdateVAP [myform]
  essid=X                        (text)
  broadcast_essid=<UNDEF>        (checkbox) [*<UNDEF>/off|any]
  authentication=<UNDEF>         (checkbox) [*<UNDEF>/off|any/authentication]
  wp=<UNDEF>                     (checkbox) [*<UNDEF>/off|any/Wp]
  8021x_mode=wpa                 (option)   [*wpa/WPA|wep/WEP]
  w_p=<UNDEF>                    (checkbox) [*<UNDEF>/off|any/Wp]
  8021x_mode=wpa                 (option)   [*wpa/WPA|wep/WEP]
  cancel=Cancel                  (button)
  add=Save                       (submit)

如你所见,没有any的选择.

也许javascript正在做一些我们不知道的事情。

解决方法是使用LiveHttpHeaders Firefox addon捕获表单POSTed to /goform/FormUpdateVAP,然后使用WWW::Mechanize执行POST请求,而不是滴答滴答。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14345970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档