无法设置SelectControl元素的值

时间:2011-07-04 02:45:52

标签: python 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”只是一个值,网站允许其UI中接下来两周的值,因此,根据您何时看到这一点,允许值列表将会更改。只需用一个允许的值替换'3'......仍然不适合我...

1 个答案:

答案 0 :(得分:1)

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"],您的代码应该有效。

编辑:我实际上尝试使用mechanize查看相关页面,试试这个

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 doesn't support javascript,请尝试使用Selenium Webdriver来抓取您需要的数据。