2012-08-15 102 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

相關問題