selenium自動化jsカレンダーコントロール操作


カレンダーコントロールはweb上でよく出会うシーンで、入力できることもありますが、入力できないこともあります.次に12306サイトを例に、カレンダーコントロールがreadonly属性の問題を解決する方法を説明します.
基本的な考え方:jsでreadonly属性を削除し、日付テキストの内容を直接入力します.
Googleで入力ボックスのプロパティを表示します:readonly="",次のようにします.
 
jsでreadonlyプロパティを削除するには:
1.jsで要素属性を削除する基本構想:まず要素にナビゲートし、removeAttribute(「readonly」)方法で属性を削除する
2.出発日要素idは:train_Date,対応jsコード:'goData=document.getElementById("train_date");'
3.removeAttribute()メソッドを使用して属性を削除する:'goData.removeAttribute("readonly")'
 
日付を入力:
1.日付を入力する前に、必ずテキストを空にしてください.そうしないと、入力できません.
2.ここに日付を入力すると、カレンダーコントロールが自動的にポップアップされます.
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.12306.cn')

#   js       readonly  
goData = 'document.getElementById("train_date").removeAttribute("readonly");'

#   webdriver        js
driver.execute_script(goData)

#         
driver.find_element_by_id('train_date').clear()
driver.find_element_by_id('train_date').send_keys('2019-07-01')

jsメソッドを使用して日付を入力すると、カレンダーはポップアップされません.
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.12306.cn')

#     readonly  
goData = 'document.getElementById("train_date").removeAttribute("readonly");'
#   webdriver        js
driver.execute_script(goData)
#   js      
js_value = 'document.getElementById("train_date").value = "2019-07-01"'
#   webdriver        js
driver.execute_script(js_value)