2012-08-15 91 views
0

检查复选框我应该如何检查这样一个复选框:无法通过Perl的LWP :: UserAgent的

<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”中的元素名称代表,但我也尝试过(任何想法?): “测试2 \%40mydomain.com_notmetoo '=>'on','[email protected]_notmetoo'=>'on', 没有成功。

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

谢谢。

特里。


更新#1:这里是POSTDATA值从Firefox的“篡改数据”扩展名,当我检查的Test2的notmetoo框后提交:

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-- 

这是否帮助任何人帮助我吗?

+0

您必须向我们显示包含此输入的整个表单。这是一组具有相同名称的复选框吗? – Borodin 2012-08-15 03:15:58

+0

如果您正在模拟浏览器,那么您应该考虑WWW :: Mechanize – Borodin 2012-08-15 03:21:10

+0

@Borodin。感谢您的建议。以下是整个表单的副本:(http://homepages.paradise.net.nz/abcd/mailman1.htm)。正如你所看到的,复选框有不同的名称。我刚刚注意到,与这个GNU Mailman“网站”中的其他网页(我没有这样的问题)不同,这个链接在

标签中有'enctype ='multipart/form-data''。至少其他一些人根本没有'enctype ...'。这对我们有帮助吗?我并不想模拟浏览器 - 只需通过Perl检查一个框。 – Terry 2012-08-21 10:04:06

回答

2

我对复选框的理解是value=指定了复选框被选中时变量的值。所以,你的困惑value="off"实际上意味着大公你需要

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

为了表明选中该复选框。

+0

好点,谢谢。请注意,我的第一篇文章给出了一个'unchecked'元素的例子。下面是从网页2个这样的元件 - 一个检查和一个不:'​​

​​
'看起来好像被检查的人在'CHECKED'上有'value =',其余的只有'value ='off'',所以我我不确定'价值'属性在这种情况下的用途。注意:我没有创建这个(GNU Mailman)网页,我无法更改它。 – Terry 2012-08-21 10:22:05

1

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

而且,考虑使用WWW::Mechanize基本的网络操作是这样的(无javascript),它更容易和直观,也WWW::MechanizeLWP::UserAgent子类,所以你仍然可以使用LWP的方法。

+0

谢谢Annjawn。我想我的复选框在检查时有value ='on'。请参阅我上面的2条评论,包括我在第一条评论中链接到的网页的副本。如果我尝试使用WWW :: Mechanize,那么我是不是会遇到同样的问题? – Terry 2012-08-21 10:25:15

+0

@Terry'WWW :: Mechanize'使用和调试简单得多。另外,正如我前面提到的,您仍然可以使用'LWP'方法来唱歌'WWW :: mechanize'继承那些方法。 – Annjawn 2012-08-21 13:55:01

+0

谢谢Annjawn。我已经开始关注WWW :: Mechanize。我在原始文章中添加了“更新#1”,并提供了更多信息。 – Terry 2012-08-21 23:19:34

相关问题