python selenium 日期控件定位


在做自動化時經常會遇到各種各樣的時間選擇框(如下圖),那么如何去精准選擇想要的時間呢?

 

 

 如果需要一個一個去點擊,那肯定非常不穩定,也很難去選擇時間跨度大的日期和精准日期。

這個時候我們就需要用到萬能的JS了,一般日期框都是只讀屬性,通過JS將只讀屬性去掉,就可以直接 send_keys()輸入時間即可

 

 

 

這里給個示例

# 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)
driver.execute_script(js)
driver.find_element_by_id('txtBeginDate').send_keys('2016-08-24')

但是一般的日期輸入框很少有ID屬性,document一共有這幾種查找方式(見下圖),可以在console調試,如果能找到即可將只讀屬性去掉

 

 

 

但是如果通過以上方式都無法找到,該怎么處理呢?

我們可以通過 addAttribute 或者 setAttribute 給日期添加元素屬性,再使用JS將只讀屬性去掉即

 def addAttribute(self, selector, attributeName, value):
        '''
        封裝向頁面標簽添加新屬性的方法
        調用JS給頁面標簽添加新屬性,arguments[0]~arguments[2]分別
        會用后面的element,attributeName和value參數進行替換
        添加新屬性的JS代碼語法為:element.attributeName=value
        比如input.name='test'
        '''
        ele = self.find_element(selector)
        self.driver.execute_script("arguments[0].%s=arguments[1]" % attributeName, ele, value)

#補充說明
#ele:元素定位
#attributeName:設置屬性名
#value:設置屬性值
完整代碼實現
def send_create_time(self):
    """輸入創建時間"""
    #給日期控件添加ID屬性並移除只讀屬性
    self.addAttribute(data['create_time'], 'id', 456789)
    js = "document.getElementById('456789').removeAttribute('readonly')"
    self.execute_script(js)
    return self.find_element(data['create_time']).send_keys('2020/11/15 00:00:00 - 2020/12/15 00:00:00')

  

 
        

補充說明:

有些使用send_keys()輸入時間但是提交請求的時候發現並沒有傳參時間,這個可能是輸入的時間格式不對,可以在頁面上手動調試,將只讀屬性去掉並發送請求,如果接口有傳參說明可以。

不行的話可以先手動選擇時間在復制粘貼即可

 

 上圖我輸入非時間格式接口請求是沒有傳時間參數的,所以要保證傳參正確


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM