无法设置SelectControl元素的值
我正在尝试通过使用 mechanize 提交一个表单来获取可以被机器读取的公交时刻表数据。
不过,我在设置 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
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 不支持 JavaScript,你可以试试用 Selenium Webdriver 来抓取你需要的数据。