2011-07-04 38 views
1

我想通過提交機械化表單來獲取機器可分析的總線調度數據。無法設置SelectControl元素的值

不過,我對機械化語法設置

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

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 doesn't support javascript,嘗試使用Selenium Webdriver颳去你需要的數據。

+0

呀,這個問題是問昨天,當「3」是一個有效的答案:-)我試圖與(比如說)「10」,我也得到了同樣的錯誤 – Philippe

+0

請參見上面的編輯答案。 – cerberos

+0

Selenium Webdriver太酷了。我花了幾分鐘的時間,它看起來像是一個更好的解決我的問題。使用easy_install selenium進行安裝很簡單。謝謝! – Philippe