selenium控制日曆控件

​在使用selenium爬取數據時,有時會需要選擇日期,來獲取某個時間段的數據。網頁上日曆控件一般是一個文本輸入框,鼠標點擊,就會彈出日曆界面,可以選擇具體日期。這篇就介紹用selenium如何實現自動化控制日曆控件。

在這裏插入圖片描述

基本思路

方法一:可以模擬鼠標點擊,拖動的方式。
方法二:使用js進行控制直接輸入日期文本內容。

這裏主要介紹第二種方法。因爲大部分的日期控件,都可以把它當成一個普通的input框處理,進行輸入操作。但是日曆控件一般都會有一個readonly屬性,讓用戶只能夠通過鼠標選擇,不能夠輸入。

因此,需要先將這一屬性去掉,再通過js控制,在input框內直接輸入日期,這樣就可以達到控制日曆控件的目的。其中,selenium有兩種執行方法,一是執行js代碼,二是通過send_keys 進行輸入。

具體代碼

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.12306.cn/index/")

# 等待 首頁 元素出現
element=WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,'//li[@class="nav-item nav-item-w1 active"]/a')))

# 處理開始時間
# js去掉readonly屬性
js = 'document.getElementById("train_date").removeAttribute("readonly");'
driver.execute_script(js)

# 第一種:使用js控制
js_value = "document.getElementById('train_date').value='{}'" .format("2018-05-20")
driver.execute_script(js_value)

# 第二種:直接輸入日期
#driver.find_element_by_id('train_date').clear()
#driver.find_element_by_id('train_date').send_keys('2018-05-20')

time.sleep(5)
driver.close()

效果
在這裏插入圖片描述
可以看到,上面的日曆控件的日期已經被修改了。
但是input標籤的value值並沒有改變,我猜測這個value值是一個初始化值,應該會在提交的時候,獲取修改過後的值賦給另外一個變量。

如果你有不同的想法,或者知道正確的邏輯,歡迎在留言告訴我。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章