2011-06-26 22 views
1

私は、Mechanizeを使用してPythonでフォームを動的に入力しようとしています。しかし、フォームを持つHTMLページのソースを調べると、フォームのコントロールの一部に同じ名前が付いていることがわかりました。ここでは、フォームからの抜粋です:html形式を区別する同じ名前のSELECT項目

<form action="[some website]" method=post> 
<table> 
    <tr><td> 
     <select NAME="mv_searchspec" size="1">  
      <option VALUE="1119">Fall 2011 (1119)</option> 
      <!-- other options here --> 
     </select> 
    </tr><td> 
    <tr><td> 
     <select NAME="mv_searchspec" size="1"> 
      <option VALUE="">Select Department</option> 
      <option VALUE="ACC">ACC</option> 
      <!-- other options here --> 
     </select> 
    </tr></td> 
</table> 
</form> 

は名前/ IDでそれらを特定せずにSELECTの各コントロールのpossible_itemsを取得する方法はありますか?

+2

それはバックエンドに固有ですが、非常に多分方法があります。 PHPでは、最後の値は他のものよりも優先されます(my_searchspec []など、名前が '[]'で終わる場合を除き、 'my_searchspec'は配列としてアクセスできます)。 ColdFusionでは、値はコンマで区切られます。 – zneak

+0

タイトルにタグがありません。 –

答えて

5

あなたはのように、明らかにこれはambigiousあるbr['mv_searchspec'] = 'foo'ような何かを行うことはできませんオプションを選択

import mechanize 
from BeautifulSoup import BeautifulSoup 
br = mechanize.Browser() 
resp = br.open('your_url') 
soup = BeautifulSoup(resp.get_data()) 
second_select = soup.findAll('select', name="mv_searchspec")[1] 
# now use BeautifulSoup API to get the data you want 

を取得するために応答を解析するためにBeautifulSoupを使用することができます。あなたはこれを行うことができるはずです

br.select_form(nr=0) # select index 
controls = br.form.controls 
controls[desired_index]._value = 'your_value' 
... 
br.submit() 
0

zneakによると、処理はバックエンド固有です。実現する重要なことは、属性 'name'が指定された各要素がPOST/GETを介して送信されることです(空であっても)。したがって、それらを区別する方法は、単にその順序で行うだけです。

関連する問題