selenium 处理时间日期控件 解决查询后失效问题

如果你是通过 js 来 清空 readonly 属性, 向下面这样代码:

#-*- coding:utf-8 -*-
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("file:///C:/bootstrap-datetimepicker/bootstrap-datetimepicker/demo/index.html")
js = "$('input:eq(0)').removeAttr('readonly')"  # jQuery,移除属性
# js = "$('input:eq(0)').attr('readonly',false)"  # jQuery,设置为false
driver.execute_script(js)
input_datetime = driver.find_element_by_xpath('/html/body/div[1]/form/fieldset/div/div[1]/input[1]')
input_datetime.send_keys("2017-09-21")
input_datetime.click()
time.sleep(5)
driver.quit()

那么我想说,这样是行不通的 , 当点击查询数据后,日期控件会自动清空,导致查询数据无效
必须要通过selenium 的各种鼠标事件,点击事件,等来操作才行。

selenium 的鼠标事件:

click(on_element=None) ——单击鼠标左键
click_and_hold(on_element=None) ——点击鼠标左键,不松开
context_click(on_element=None) ——点击鼠标右键
double_click(on_element=None) ——双击鼠标左键
drag_and_drop(source, target) ——拖拽到某个元素然后松开
drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
key_down(value, element=None) ——按下某个键盘上的键
key_up(value, element=None) ——松开某个键
move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
move_to_element(to_element) ——鼠标移动到某个元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
perform() ——执行链中的所有动作
release(on_element=None) ——在某个元素位置松开鼠标左键
send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

我就不多废话了,我写了一个处理日期控件的库date_controller库,专门类解决这种日期控件(网上现在还没有解决方案),。

如果你的控件是这样:


image.png

或者其它的样式,都能解决。

库所需要的参数:

class DataRequest:

    # driver: 浏览器驱动
    # start_time: 要设置的开始时间 ,格式必须: 2021-01-11 12:09:34
    # end_time: 要设置的结束时间 , 格式必须: 2021-01-11 17:09:34
    # alert_css : 日期控件 弹出按钮的css selector
    # last_year_css : 前一年 按钮的css selector
    # next_year_css: 后一年 按钮的 css selector
    # label_year_css:  日期控件上,年展示的label框,表示当前选中了哪一年
    # day_div_css : 天选择的 表格css selector
    # h_m_s_scroll_css 时,分,秒 滚轮面板的css selector
    # btn_ok_css: 确定按钮
    def __init__(self, driver, start_time, end_time, alert_css,
                 last_year_css, next_year_css, label_year_css,
                 last_month_css, next_month_css, label_month_css,
                 day_table_css,
                 h_m_s_scroll_css,
                 # hour_ul_css, min_ul_css, second_ul_css,
                 btn_ok_css
                 ):

...........
........

就是传一些css selector, 因为每个控件的css都不一样。

客户端使用:

image.png

要代码的请联系我 , qq:657455400 wx:hadluo

你可能感兴趣的:(selenium 处理时间日期控件 解决查询后失效问题)