Не могу понять, как использовать Mechanize с Python для выбора элементов из раскрывающегося списка на странице ASP.NET.

У меня есть страница ASP.NET (расположена здесь: http://www.kraftrecipes.com/Products/ProductMain.aspx), в котором есть раскрывающийся список различных брендов продуктов питания. Я пытаюсь использовать Mechanize в Python, поэтому я могу щелкнуть каждый элемент в списке, перейти на страницу со списком продуктов и, в конечном итоге, использовать BeautifulSoup для очистки информации о продукте. Вот часть HTML:

<fieldset  class="pulldownfieldset">

    <label>...or use the pulldown menu below.</label>

    <select name="ctl00$SPWebPartManager1$g_9bdf5859_9c73_4144_8b6a_9a3b3df417d5$ctl01$ddlBrand"
            id="ctl00_SPWebPartManager1_g_9bdf5859_9c73_4144_8b6a_9a3b3df417d5_ctl01_ddlBrand"
            onkeypress="return doSubmit(event, 'ctl00_SPWebPartManager1_g_9bdf5859_9c73_4144_8b6a_9a3b3df417d5_ctl01_btnBrandGo');">

    <option value="322">Arrowroot</option>

    <option value="1">A.1. Steak Sauces and Marinades</option>
    etc.

Сначала я просто попытался выбрать форму, но Python пожаловался, что ее не существует.

browser.select_form("ctl00$SPWebPartManager1$g_9bdf5859_9c73_4144_8b6a_9a3b3df417d5$ctl01$ddlBrand")

Когда я делаю это:

browser.select_form(nr=0)
print browser.form

Я получаю список всех форм, но выполнение browser.form.name дает "aspnetForm", что наводит меня на мысль, что Mechanize видит все на странице как одну большую форму. Если это правда, как я могу получить выбор в раскрывающемся списке и отправить его?

Дайте мне знать, если вам нужна дополнительная информация.

Спасибо.


person Community    schedule 01.12.2011    source источник


Ответы (1)


На странице только одна форма. То, что вы хотите, это контроль. Пытаться:

form = browser.forms()[0]
control = form.find_control(name="ctl00$SPWebPartManager1$g_9bdf5859_9c73_4144_8b6a_9a3b3df417d5$ctl01$ddlBrand")
person Greg Ra    schedule 01.12.2011
comment
Спасибо! Это сработало с небольшой модификацией: browser.select_form(nr=0) control = browser.find_control(name="ctl00$SPWebPartManager1$g_9bdf5859_9c73_4144_8b6a_9a3b3df417d5$ctl01$ddlBrand") - person ; 04.12.2011