使用Selenium实现自动化操作时,当遇到时间的选择一般会用send_key(‘2024-02-04’)发送时间,但当时间控件的属性为input readonly时,直接发送日期无效,因此,可使用jQuery将readonly属性移除。
- 在图1、图2所示的控件中,对开始时间startTime和结束时间endTime通过jQuery移除readonly属性,我使用了如下代码:
js = "$('input[id=startTime]').removeAttr('readonly')"
driver.execute_script(js)
driver.find_element(by=By.ID, value='startTime').send_keys('2024-02-04 00:00:00')
- 如果该jQuery代码不能顺利选取时间,可以尝试另外几种方式:
js = "document.getElementById('startTime').removeAttribute('readonly')" # 1.原生js,移除属性
js = "$('input[id=startTime]').attr('readonly',false)" # 2.jQuery,设置为false
js = "$('input[id=startTime]').attr('readonly','')" # 3.jQuery,设置为空(同2)
- 代码汇总:
- jQuery的四种方式(都试一遍看看哪个可以用);
- driver.execute_script(js) 执行js代码;
- send_keys发送指定时间(需要按照element中的时间格式);
# js = "document.getElementById('startTime').removeAttribute('readonly')" # 1.原生js,移除属性
js = "$('input[id=startTime]').removeAttr('readonly')" # 2.jQuery,移除属性
# js = "$('input[id=startTime]').attr('readonly',false)" # 3.jQuery,设置为false
# js = "$('input[id=startTime]').attr('readonly','')" # 4.jQuery,设置为空(同3)
driver.execute_script(js)
driver.find_element(by=By.ID, value='startTime').send_keys('2024-02-04 00:00:00')
driver.find_element(by=By.ID, value='endTime').send_keys('2024-02-05 00:00:00')