2011-03-21 37 views
0

我想編寫一個腳本,讓我使用本網站如何處理網站上的無名錶單?

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

(我需要使用它幾百次,我不喜歡這樣做,手動)

我已經尋找途徑,這到底是怎麼使用Perl做互聯網,我碰到WWW::Mechanize,這似乎正是我一直在尋找來了。但是現在我發現,那個網站,我想使用的形式沒有名字 - 它的報關行只是讀取

<FORM METHOD="POST" ACTION="./lga-form.cgi" ENCTYPE=multipart/form-data> 

起初我試過根本就沒有設定我WWW::Mechanize對象的form_name屬性,它給了我這個錯誤當我規定的形式的電子郵件地址字段值的消息:

Argument "[email protected]" isn't numeric in numeric gt (>) at /usr/share/perl5/WWW/Mechanize.pm line 1618. 

然後我試着設置form_name''後來' ',但它沒有用,我只是得到這個消息:

There is no form named " " at ./automate_LGA.pl line 40 

什麼方法是有處理這個沒有名字的形式?這將是最有幫助的,如果有人在這裏可以回答這個問題 - 即使答案要點使用WWW::Mechanize,我只想把工作做好,(或多或少)無論怎麼走。

非常感謝!

回答

0

好吧,我已經找到了答案。我可以通過它的數字處理無名的形式(有網頁上只是一種形式,所以我猜這將是數1,和它的工作)。這裏是我的代碼部分:

my $lga = WWW::Mechanize->new(); 

my $address = '[email protected]'; 
my $options = '-3 -o0 -d:4.0'; 
my $pdb_2 = "${pdb_id}_1 ${pdb_id}_2"; 

$lga->get('http://proteinmodel.org/AS2TS/LGA/lga.html'); 
$lga->success or die "LGA GET fail\n"; 

$lga->form_number(1); 
$lga->field('Address', $address); 
$lga->field('Options', $options); 
$lga->field('PDB_2', $pdb_2); 
$lga->submit(); 
$lga->success or die "LGA POST fail\n"; 
1

我不知道WWW::Mechanize,但它的Python等價物mechanize爲您提供了一組表格,即使您不知道它們的名稱,也可以進行迭代。

例(從它的主頁獲取):

import mechanize 

br = mechanize.Browser() 
br.open("http://www.example.com/") 

for form in br.forms(): 
    print form 

編輯:WWW::Mechanize的文檔搜索,我發現了$mech->forms() method,這可能是你所需要的。但由於我不知道Perl或WWW::Mechanize,我會離開那裏我的python答案。

+0

Downvoter,請解釋答案的錯誤。 – 2011-03-22 11:06:47

6

一個簡單的,更可靠的方法是使用$mech->form_with_fields()方法從WWW::Mechanize選擇您可以根據它所包含的字段想要的形式。

更方便的是,使用submit_form方法與with_fields選項。

例如,爲了找到其中有一個名爲「用戶名」和「密碼」字段的表格,填寫他們並提交表單,它是那麼容易,因爲:

$mech->submit_form( 
    with_fields => { username => $username, password => $password } 
); 

這樣做它的優點是如果他們對HTML進行混洗,改變HTML中表單的順序,或者在您感興趣的表單之前添加新表單,您的代碼將繼續工作。