You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium操作日期输入框clear()无效无法清空内容怎么解决

问题复现

现有测试代码如下:

from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import WebDriverWait     
from selenium.webdriver.common.by import By     
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import time

PATH = "driver\chromedriver.exe"
driver = webdriver.Chrome(executable_path=PATH)
url = 'https://www.mergermarket.com/homepage'
driver.get(url)

deals = driver.find_element_by_xpath('//*[@id="header"]/div/div[2]/nav/ul/li[4]/a')
urldeals = deals.get_attribute("href")
driver.get(urldeals)

custom1 = driver.find_element_by_xpath('//*[@id="searchCriteriaSummary"]/div[4]/div/div[2]/div/div[1]/div[2]/div/div/div[2]/div')
custom1.click()

custom2 = driver.find_element_by_id('react-select-12-option-0')
custom2.click()
time.sleep(1)

date = driver.find_element_by_xpath('//*[@id="date-picker_from"]')
date.click()
date.send_keys('01/11/2021') 
time.sleep(1)

date2 = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="date-picker_to"]')))
date2.click()
date2.clear()
date2.send_keys("15/11/2021")

问题现象:

  • 在左侧起始日期输入框填入01/11/2021后,站点会自动在右侧结束日期输入框填充当前日期
  • 调用clear()方法清空结束日期后输入自定义值,新内容会直接追加在原有默认值后方,无法替换
根因说明

该站点基于React框架开发,日期输入框绑定了组件内部状态,Selenium原生的clear()方法仅修改了DOM节点的展示value,没有触发组件的change更新事件,导致组件底层存储的日期值没有被同步清空,后续输入就会追加在原有值尾部。

可行解决方案
  • 方案1:全选替换法(最便捷)
    点击输入框后通过快捷键全选现有内容,直接输入新值覆盖原有内容:
date2 = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="date-picker_to"]')))
date2.click()
# Windows/Linux用CTRL+A,Mac环境替换为Keys.COMMAND
date2.send_keys(Keys.CONTROL, 'a')
date2.send_keys("15/11/2021")
  • 方案2:JS直接赋值法(稳定性最高)
    通过执行JS直接修改输入框值并主动触发变更事件,跳过前端自动填充逻辑:
date2 = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, '//*[@id="date-picker_to"]')))
# 直接设置目标日期值
driver.execute_script("arguments[0].value = '15/11/2021';", date2)
# 触发change事件同步React组件状态
driver.execute_script("arguments[0].dispatchEvent(new Event('change'));", date2)
  • 方案3:退格清空法(兼容性适配)
    如果全选逻辑失效,可以通过多次按退格键清空现有内容后再输入:
date2 = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="date-picker_to"]')))
date2.click()
# 日期格式为dd/mm/yyyy共10位字符,按10次退格清空
for _ in range(10):
    date2.send_keys(Keys.BACKSPACE)
date2.send_keys("15/11/2021")

内容的提问来源于stack exchange,提问作者LaurieFalcon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:27:00