无法通过Perl LWP :: UserAgent检查复选框

时间:2012-08-15 01:38:47

标签: perl mailman

我应该如何查看这样的复选框:

<td><center><INPUT name="test2%40mydomain.com_notmetoo" type="CHECKBOX" value="off" ></center></td>

使用Perl的LWP :: UserAgent模块?

此代码执行此操作(输出就像是在未选中复选框的情况下提交的 - 即网页刷新并清除复选框。)

#!/usr/bin/perl
use LWP::UserAgent;

$ua = new LWP::UserAgent;
$ua->cookie_jar({ file => "$ENV{HOME}/.mailmanrc" });

$res = $ua->post('http://mydomain.com/mailman/admin/test1_mydomain.com/members/list',
    Content_Type => 'form-data',
    Content => [
        'test2%40mydomain.com_notmetoo' => 'on',
        setmemberopts_btn => 'Submit Your Changes'
    ]
);
if ($res->is_success) {
    print $res->decoded_content;
    print "Changed user setting...I hope!\n";
}
else {
    die $res->status_line;
}

我不确定为什么“@”在元素名称中表示为“%40”(任何想法?),但我也尝试过: 'test2 \%40mydomain.com_notmetoo'=&gt; '上','test2@mydomain.com_notmetoo'=&gt; '上', 没有成功。

网站上似乎没有JavaScript(即在禁用JavaScript的浏览器中它可以正常工作)。我无法让它在Perl中工作。

感谢。

特里。


更新#1:这是我在检查Test2的notmetoo框后提交时Firefox的'Tamper Data'扩展名的POSTDATA值:

POSTDATA =-----------------------------2921376274802
Content-Disposition: form-data; name="findmember"


-----------------------------2921376274802
Content-Disposition: form-data; name="test1%40mydomain.com_realname"

Test1
-----------------------------2921376274802
Content-Disposition: form-data; name="user"

test1%40mydomain.com
-----------------------------2921376274802
Content-Disposition: form-data; name="test1%40mydomain.com_hide"

on
-----------------------------2921376274802
Content-Disposition: form-data; name="test1%40mydomain.com_notmetoo"

on
-----------------------------2921376274802
Content-Disposition: form-data; name="test1%40mydomain.com_plain"

on
-----------------------------2921376274802
Content-Disposition: form-data; name="test1%40mydomain.com_language"

en
-----------------------------2921376274802
Content-Disposition: form-data; name="test2%40mydomain.com_realname"

Test2
-----------------------------2921376274802
Content-Disposition: form-data; name="user"

test2%40mydomain.com
-----------------------------2921376274802
Content-Disposition: form-data; name="test2%40mydomain.com_hide"

on
-----------------------------2921376274802
Content-Disposition: form-data; name="test2%40mydomain.com_notmetoo"

off
-----------------------------2921376274802
Content-Disposition: form-data; name="test2%40mydomain.com_plain"

on
-----------------------------2921376274802
Content-Disposition: form-data; name="test2%40mydomain.com_language"

en
-----------------------------2921376274802
Content-Disposition: form-data; name="test3%40mydomain.com_realname"

Test3
-----------------------------2921376274802
Content-Disposition: form-data; name="user"

test3%40mydomain.com
-----------------------------2921376274802
Content-Disposition: form-data; name="test3%40mydomain.com_hide"

on
-----------------------------2921376274802
Content-Disposition: form-data; name="test3%40mydomain.com_plain"

on
-----------------------------2921376274802
Content-Disposition: form-data; name="test3%40mydomain.com_language"

en
-----------------------------2921376274802
Content-Disposition: form-data; name="setmemberopts_btn"

Submit Your Changes
-----------------------------2921376274802
Content-Disposition: form-data; name="allmodbit_val"

0
-----------------------------2921376274802--

这有助于任何人帮助我吗?

2 个答案:

答案 0 :(得分:2)

我对复选框的理解是value=指定了复选框选中时变量的值。因此,令人困惑的value="off"实际上意味着您需要

'test2%40mydomain.com_notmetoo' => 'off'

表示已选中此框。

答案 1 :(得分:1)

在您的情况下,复选框在选中时将显示“off”值。如果值类似于value="checkbox1",这将不那么令人困惑。在这种情况下,复选框的值在选中时为checkbox1

此外,考虑将WWW::Mechanize用于此类基本网络操作(不使用javascript),它更容易和直观,WWW::Mechanize也是LWP::UserAgent的子类,因此您仍然可以使用LWP方法