Различение HTML-формы SELECT элементов с одинаковым именем - PullRequest
1 голос
/ 26 июня 2011

Я пытаюсь динамически заполнить форму в Python, используя Mechanize. Однако, когда я проверил источник 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, не идентифицируя их по имени / идентификатору?

Ответы [ 2 ]

5 голосов
/ 26 июня 2011

Вы можете использовать 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()
0 голосов
/ 26 июня 2011

Как сказал zneak, обработка специфична для бэкэнда.Важно понимать, что каждый элемент с указанным атрибутом name будет отправлен через POST / GET, даже если он пуст.Таким образом, способ различать их просто по их порядку.

...