Невозможно установить значение элемента SelectControl - PullRequest
1 голос
/ 04 июля 2011

Я пытаюсь получить данные расписания автобусов, разбираемых машиной, отправив форму с помощью mechanize.

Однако меня сбивает с толку синтаксис механизации для установки

import mechanize
br = mechanize.Browser()
br.open("http://www.planibus.sto.ca/HastinfoWeb/StartTimetableForm.aspx")
br.select_form(name="TimetableQueryForm")
br["RouteDirectionDynamicComboBox$ComboBox_Input"] = "10 OTTAWA" # works fine, it's a TextControl
br["DatePicker$DaysDropDownList"] = ["3"] # This is a SelectControl
### mechanize._form.ItemNotFoundError: insufficient items with name '3'

mechanize._form.ItemNotFoundError: insufficient items with name '3' выглядит так, как будто ему нужен список, но когда я вношу более одного элемента в список (что делаетнемного смысла, учитывая, что это средство выбора даты) Я получаю:

mechanize._form.ItemCountError: single selection list, must set sequence of length 0 or 1

Я думал, что мой оригинал ["3"] был последовательностью длины 1?

Спасибо за внимание.Я, вероятно, упускаю что-то очевидное ...

Редактировать: обратите внимание, что вышеприведенное '3' - это всего лишь одно значение, и веб-сайт допускает значения в течение следующих двух недель в своем пользовательском интерфейсе, поэтому в зависимости от того, когда выПосмотрите, список допустимых значений изменится.Просто замените «3» одним из допустимых значений ... У меня все равно не работает ...

1 Ответ

1 голос
/ 04 июля 2011

3 не является одним из доступных вариантов выбора, я вижу следующие варианты:

<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>

Так что попробуйте br["DatePicker$DaysDropDownList"] = ["4"] и ваш код должен работать.

Редактировать: Я на самом деле пытался посмотреть на страницу с механизировать, попробуйте это

import mechanize
br = mechanize.Browser()
br.open("http://www.planibus.sto.ca/HastinfoWeb/StartTimetableForm.aspx")
br.select_form(name="TimetableQueryForm")
select = br.form.controls[8] # DatePicker$DaysDropDownList
select.possible_items()
>>> []

Никаких опций нет, я думаю, что javascript используется для их заполнения после загрузки страницы. К сожалению, mechanize не поддерживает javascript , попробуйте использовать Selenium Webdriver для очистки нужных вам данных.

...