python下selenium如何處理日期控件的幾種方法

1. 背景介紹

  • 我們在使用selenium爬取數據時,有時會需要選擇日期,來獲取某個時間段的數據。但是網上的日期控件還真是五花八門,有正常一點的:
  • 淘寶聯盟上的
  • 有這樣的:
    在這裏插入圖片描述
  • 當然還有這樣的:
    在這裏插入圖片描述
  • 簡單點的,我們還可以模擬鼠標點擊,拖動的方式。但是複雜點的,那就完蛋了,該怎麼辦呢?
  • 其實很簡單,不管我們是通過什麼方式選的,最終往服務器上發送的都是我們選定的日期數據,那麼我們就不用去搞什麼時間日期控件了,好好研究一下,我們手動選擇的日期數據,是存儲在頁面的哪個位置,又是如何發送給服務器的,那就簡單了。
  • 可喜的是,大部分的日期控件,我們都可以把它當成一個普通的input框處理,對value進行賦值操作。
    在這裏插入圖片描述
  • 也有一些類型的input框都是禁止手動輸入的,那就用js代碼把禁止輸入的readonly屬性去掉就好。

2. 代碼示例

# -*- coding: utf-8 -*-

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get('http://www.sucaijiayuan.com/api/demo.php?url=/demo/20141108-1/')

driver.switch_to.frame('iframe')

# 介紹4中操作方法
# 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')
sleep(2)
print(driver.find_element_by_id('txtBeginDate').get_attribute('value'))
driver.quit()
  • 如同驗證碼一樣,有點擊位置等各種奇怪的驗證碼,你去選的話很麻煩,想辦法繞過去纔是真理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章