使用Selenium无法在Firefox的<input type="date">字段中输入日期
解决Firefox中Selenium无法操作的问题
我之前也踩过Firefox默认日期选择器的坑——Chrome和Edge都顺风顺水,唯独Firefox这个内置选择器不让检查还没法直接输入,给你几个亲测有效的解决办法:
方法1:用JavaScript直接修改元素的value属性
这是最省心的办法,绕过Firefox的输入限制,直接给input元素设置日期值。步骤如下:
- 先定位到目标
<input type="date">元素(不用管那个内置选择器,元素本身是能找到的,比如用CSS选择器或者XPath定位) - 调用Selenium的
execute_script方法修改它的value,注意日期格式必须是YYYY-MM-DD
示例代码(Python):
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Firefox() driver.get("你的目标页面URL") # 定位日期输入框 date_input = driver.find_element(By.CSS_SELECTOR, "input[type='date']") # 用JS设置日期值 driver.execute_script("arguments[0].value = '1990-05-15';", date_input)
这个方法不需要改动浏览器设置,几乎所有场景都适用,还能避免模拟点击选择器的麻烦。
方法2:禁用Firefox的内置日期选择器
如果你的测试环境长期需要操作日期输入框,可以直接让Firefox把<input type="date">当成普通文本框处理,步骤是初始化driver时添加偏好设置:
示例代码(Python):
from selenium import webdriver from selenium.webdriver.firefox.options import Options options = Options() # 禁用内置日期选择器,让date类型input变成普通文本框 options.set_preference("dom.inputtypes.date.enabled", False) driver = webdriver.Firefox(options=options) driver.get("你的目标页面URL") # 现在可以直接用send_keys输入日期了 date_input = driver.find_element(By.CSS_SELECTOR, "input[type='date']") date_input.send_keys("1990-05-15")
设置完之后,Firefox就不会弹出那个没法检查的内置选择器了,操作起来和Chrome/Edge完全一致。
方法3:用ActionChains模拟键盘输入(备选)
如果上面两种方法都不适用,还可以试试先激活输入框,再模拟键盘输入日期。不过这个方法有时候会因为Firefox的输入限制失效,所以作为备选:
示例代码(Python):
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox() driver.get("你的目标页面URL") date_input = driver.find_element(By.CSS_SELECTOR, "input[type='date']") # 先点击激活输入框 date_input.click() # 模拟输入日期 ActionChains(driver).send_keys("19900515").perform() # 或者按格式输入,有些场景需要按回车确认 # ActionChains(driver).send_keys("1990-05-15").send_keys(Keys.ENTER).perform()
这个方法需要注意日期输入的格式,有些情况下可能需要调整输入的字符顺序。
内容的提问来源于stack exchange,提问作者Grishma Singh




