自动化过程中,有一些时间控件只能选择时间,并不能直接填写时间,用常规方法就是继续定位,但是这种方法很繁琐。可以尝试通过js来操作日期控件。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: Frank time:2020/8/5
import time
from selenium import webdriver
# 以途牛订机票为例子
dr = webdriver.Chrome()
url = 'https://flight.tuniu.com/'
dr.get(url)
dr.maximize_window()
time.sleep(2)
js = "$('input[id=J_FormDepartDate]').removeAttr('readonly')"
js2 = "$('input[id=J_FormDestDate]').removeAttr('readonly')"
#下面的方法不行,还没研究
#js = "$('input:eq(0)').removeAttr('readonly')"
dr.execute_script(js)
dr.execute_script(js2)
time.sleep(3)
# 更换出发时间
fff = dr.find_element_by_xpath('/html/body/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[2]/div[2]/div/input')
fff.clear()
fff.send_keys('2020-11-13')
#fff.click()
#time.sleep(5)
#选择目的地
dest = dr.find_element_by_xpath('/html/body/div[2]/div[2]/div/div[2]/div[2]/div[4]/div[1]/div[2]/div/input').send_keys('广州')
# 更换返回时间
ggg = dr.find_element_by_xpath('/html/body/div[2]/div[2]/div/div[2]/div[2]/div[4]/div[2]/div[2]/div/input')
ggg.clear()
ggg.send_keys('2020-11-15')
#ggg.click()
#点击确定
dr.find_element_by_xpath('/html/body/div[2]/div[2]/div/div[2]/div[2]/div[8]/a').click()
time.sleep(5)
dr.quit()
其中js的修改方法还有如下几种,后续研究:
js = "document.getElementById('txtBeginDate').removeAttribute('readonly')" 1.原生js,移除属性
js = "$('input[id=txtBeginDate]').removeAttr('readonly')" 2.jQuery,移除属性
js = "$('input[id=txtBeginDate]').attr('readonly',false)" 3.jQuery,设置为false
js = "$('input[id=txtBeginDate]').attr('readonly','')" 4.jQuery,设置为空(同3)