問題描述
我正在嘗試使用 python 和 selenium 從日歷中選擇一個日期,但我需要一些幫助,我在 VBA 中執行此操作,但我想在 python 中執行此操作.提前致謝.
I'm trying to select a date form a calendar with python and selenium but I need some help, I did this in VBA but I want to do this in python. Thanks in advance.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver=webdriver.Firefox(executable_path=r'..geckodriver.exe')
driver.get('https://burghquayregistrationoffice.inis.gov.ie/Website/AMSREG/AMSRegWeb.nsf/AppSelect?OpenForm')
# this is the problem
driver.find_element_by_id('GNIBExDT').send_keys(10/08/2019)
推薦答案
這是一個只讀輸入 - 如果你查看 HTML src,它有 readonly
屬性.這意味著 send_keys
正在嘗試 鍵入你的價值,但不能,因為它是只讀的.但是,您仍然可以手動設置 - 嘗試:
It's a read-only input - if you look in the HTML src, it's got the readonly
attribute. This means that send_keys
, which works by emulating key presses as if it were a real user (to also trigger any eventlisteners listening for change in the input), is trying to type your value, but can't, since it's read-only. However, you can still set it manually - try:
driver.execute_script("document.getElementById('GNIBExDT').value = '10/08/2019'")
這會執行以下JS代碼:
This executes the following JS code:
document.getElementById('GNIBExDT') // Equivalent of driver.find_element_by_id('GNIBExDT') in pure JS
.value = // Used to set the 'value' of the input, which is what will be read on the backend when the form is submitted. This just sets the value directly, so it doesn't matter if it's read-only.
'10/08/2019' // The date, in string form.
他們似乎只是在示例網站上使用基本字符串來表示日期,因為它是一個自定義日期選擇器.因此,他們沒有做任何特別的事情,例如使用實際的日期格式或 Date 對象.但是,由于根據標題,這是您想要的,我將舉一個例子,讓其他在谷歌上搜索過這個問題的人這樣做:
It seems like they're just using basic strings on the example website to represent dates, since it's a custom datepicker. So, they're not doing anything special, such as using actual date formats or Date objects. However, since based on the title this is what you'd like, I'll give an example to do such for anyone else who's Googled this problem:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver=webdriver.Firefox(executable_path=r'..geckodriver.exe')
driver.get('https://www.w3schools.com/html/tryit.asp?filename=tryhtml_input_date')
driver.execute_script("document.getElementsByTagName('input')[0]" # Get the date picker from the DOM
+".valueAsDate" # Set the value *as a date object* - this is only available in real date pickers (`<input type='date'>`)
+" = new Date('2020-03-11')" # We therefore need to define it as a date object, which we do in 'yyyy-mm-dd hh:mm:ss GMT+hhmm' format
)
這篇關于如何通過 Python 使用 Selenium 將日期作為文本直接發送到具有只讀屬性的日歷控件?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!