1. 背景介紹
- 我們在使用selenium爬取數據時,有時會需要選擇日期,來獲取某個時間段的數據。但是網上的日期控件還真是五花八門,有正常一點的:
- 淘寶聯盟上的
- 有這樣的:
- 當然還有這樣的:
- 簡單點的,我們還可以模擬鼠標點擊,拖動的方式。但是複雜點的,那就完蛋了,該怎麼辦呢?
- 其實很簡單,不管我們是通過什麼方式選的,最終往服務器上發送的都是我們選定的日期數據,那麼我們就不用去搞什麼時間日期控件了,好好研究一下,我們手動選擇的日期數據,是存儲在頁面的哪個位置,又是如何發送給服務器的,那就簡單了。
- 可喜的是,大部分的日期控件,我們都可以把它當成一個普通的input框處理,對value進行賦值操作。
- 也有一些類型的input框都是禁止手動輸入的,那就用js代碼把禁止輸入的readonly屬性去掉就好。
2. 代碼示例
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get('http://www.sucaijiayuan.com/api/demo.php?url=/demo/20141108-1/')
driver.switch_to.frame('iframe')
js = "$('input[id=txtBeginDate]').attr('readonly','')"
driver.execute_script(js)
driver.find_element_by_id('txtBeginDate').send_keys('2016-08-24')
sleep(2)
print(driver.find_element_by_id('txtBeginDate').get_attribute('value'))
driver.quit()
- 如同驗證碼一樣,有點擊位置等各種奇怪的驗證碼,你去選的話很麻煩,想辦法繞過去纔是真理。