如何用Selenium设置输入框值?日期输入send_keys无效求助
解决Selenium日期输入框send_keys无效的问题
针对你遇到的日期输入框已选中但无法通过send_keys赋值的问题,可尝试以下几种方案:
移除readonly属性后输入
多数网站的日期输入框会设置readonly属性限制手动输入,需先通过JavaScript移除该属性,再执行输入操作:from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait import time driver = webdriver.Chrome() driver.get("https://permits.mynevadacounty.com/CitizenAccess/Cap/CapHome.aspx?module=Building&TabName=Building") wait = WebDriverWait(driver, 20) wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "img[src='/CitizenAccess/nc-horizontal.png']"))) start_date = wait.until(EC.element_to_be_clickable((By.ID, "ctl00_PlaceHolderMain_generalSearchForm_txtGSStartDate"))) # 移除readonly属性 driver.execute_script("arguments[0].removeAttribute('readonly');", start_date) start_date.clear() start_date.send_keys('01/01/2023') time.sleep(10) driver.quit()直接用JavaScript设置value值
绕过send_keys,直接通过JS修改输入框的value属性,这种方式更直接可靠:from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait import time driver = webdriver.Chrome() driver.get("https://permits.mynevadacounty.com/CitizenAccess/Cap/CapHome.aspx?module=Building&TabName=Building") wait = WebDriverWait(driver, 20) wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "img[src='/CitizenAccess/nc-horizontal.png']"))) start_date = wait.until(EC.visibility_of_element_located((By.ID, "ctl00_PlaceHolderMain_generalSearchForm_txtGSStartDate"))) # 直接设置value值 driver.execute_script("arguments[0].value = '01/01/2023';", start_date) time.sleep(10) driver.quit()模拟日期选择器点击(备选)
如果上述方法均无效,可尝试唤起日期选择器并模拟点击选择目标日期(需根据页面实际元素调整选择器):from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support.ui import Select import time driver = webdriver.Chrome() driver.get("https://permits.mynevadacounty.com/CitizenAccess/Cap/CapHome.aspx?module=Building&TabName=Building") wait = WebDriverWait(driver, 20) wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "img[src='/CitizenAccess/nc-horizontal.png']"))) # 点击输入框唤起日期选择器 start_date = wait.until(EC.element_to_be_clickable((By.ID, "ctl00_PlaceHolderMain_generalSearchForm_txtGSStartDate"))) start_date.click() # 选择年份 year_select = Select(wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select.ui-datepicker-year")))) year_select.select_by_value('2023') # 选择月份(0对应1月) month_select = Select(wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select.ui-datepicker-month")))) month_select.select_by_value('0') # 选择1号日期 day_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//a[text()='1']"))) day_btn.click() time.sleep(10) driver.quit()
注意事项
- 等待元素时优先使用
EC.element_to_be_clickable,确保元素处于可交互状态 - 执行JS操作前,需确认元素已被正确定位
内容的提问来源于stack exchange,提问作者mjsunnyside
相关产品推荐
相关产品推荐

