为了账号安全,请及时绑定邮箱和手机立即绑定

Selenium控制日历控件

标签:
Python 爬虫

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

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消