区分具有相同名称的html表单SELECT项

时间:2011-06-26 05:27:04

标签: python html mechanize

我正在尝试使用Mechanize在Python中动态填充表单。但是,当我检查具有该表单的HTML页面的源时,我意识到表单上的某些控件具有相同的名称。以下是表格的摘录:

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

有没有办法获取每个SELECT控件的possible_items而不用名称/ id来识别它们?

2 个答案:

答案 0 :(得分:5)

您可以使用BeautifulSoup来解析响应以获取选择选项

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

你不能做像br['mv_searchspec'] = 'foo'这样的事情,因为这显然是暧昧的。你应该能够做到这一点

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

答案 1 :(得分:0)

正如zneak所说,处理是后端特定的。要实现的重要一点是,指定属性“name”的每个元素都将通过POST / GET发送,即使它是空的。因此,区分它们的方法仅仅是它们的顺序。