继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Selenium控制日历控件

donlex
关注TA
已关注
手记 23
粉丝 17
获赞 99

​在使用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值是一个初始化值,应该会在提交的时候,获取修改过后的值赋给另外一个变量。
如果你有不同的想法,或者知道正确的逻辑,欢迎在评论告诉我。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP