2011-06-15 31 views
10

我想知道怎麼樣了,我使用機械化連接到網站,並穿越到所需的頁面在被格式化像如何使用Python選擇表單中的選項?

<td align="left"> 
        <select name="FORM1" id="FORM1" multiple="multiple" size="5"> 
         <option value="Value1">Value1</option> 
         <option value="Value2">Value2</option> 
        </select> 
    </td> 

現在表單中選擇選項。此頁面有許多表單,例如FORM1,FORM2,FORM3等,帶有選項。我想選擇(啓用)Value1,然後告訴機械化實例來點擊提交按鈕。這將是一種快速的方式來啓用基於表單名稱的選項?

回答

22

下面是一些基本用法示例,讓你去:

>>> import mechanize 
>>> br = mechanize.Browser() 
>>> br.open('http://www.w3schools.com/html/html_forms.asp') 

表格具有name屬性;有時它是空的:

>>> [f.name for f in br.forms()] 
['searchform', None, None, None, None, 'input0'] 

表單有一系列的控件;控制也有名字:

>>> forms = [f for f in br.forms()] 
>>> forms[1].controls[0].name 
'firstname' 
>>> [c.name for c in forms[3].controls] 
['sex'] 

您可以在控制得到物品的清單:

>>> forms[3].controls[0].get_items() 
[<Item name='male' id=None type='radio' name='sex' value='male'>, <Item name='female' id=None type='radio' name='sex' value='female'>] 

單選按鈕,你必須做出一個選擇:

>>> forms[3]['sex'] = ['male'] 

但該選擇必須在列表中:

>>> forms[3]['sex'] = 'male' 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Library/Python/2.6/site-packages/mechanize/_form.py", line 2782, in __setitem__ 
    control.value = value 
    File "/Library/Python/2.6/site-packages/mechanize/_form.py", line 1977, in __setattr__ 
    self._set_value(value) 
    File "/Library/Python/2.6/site-packages/mechanize/_form.py", line 1985, in _set_value 
    raise TypeError("ListControl, must set a sequence") 
TypeError: ListControl, must set a sequence 

對於複選框,就可以進行多項選擇:

>>> [(c.name, c.get_items()) for c in forms[4].controls] 
[('vehicle', [<Item name='Bike' id=None type='checkbox' name='vehicle' value='Bike'>, <Item name='Car' id=None type='checkbox' name='vehicle' value='Car'>])] 
>>> forms[4]['vehicle'] = ['Bike', 'Car'] 

你可以找到更多信息here(鏈接從Matt Hempel :)被盜。

3

當你說頁面有多個表單時,你的意思是頁面上有多個<form>元素,或者多個表單域(如<select>)?

python的Mechanize文檔sketch out how to select list items。這裏的樣品,他們提供:

# Controls that represent lists (checkbox, select and radio lists) are 
# ListControl instances. Their values are sequences of list item names. 
# They come in two flavours: single- and multiple-selection: 
form["favorite_cheese"] = ["brie"] # single 

在你的情況下,代碼選擇Value1應該是這樣的:

form["FORM1"] = ["Value1"] 
+0

感謝您的支持。糾正。 – 2011-06-15 16:10:19

+0

如果選項是? form [「FORM1」] = [「Value1」]不起作用,如何處理「content1」?謝謝 – user392412 2011-11-29 08:05:31

相關問題