Python使用Selenium实现DatePicker日期输入框自动填充今日日期求助
解决方法
方案1:绕过日期选择器直接赋值(更稳定)
该输入框设置了readonly属性,我们可以直接通过JS移除该属性后填入格式化后的今日日期,不需要操作复杂的日期选择器组件:
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 import datetime if __name__ == "__main__": driver = webdriver.Chrome() # 按需替换为你使用的浏览器驱动 # 访问目标页面的逻辑自行补充 wait = WebDriverWait(driver, 10) birthdate_input = wait.until(EC.presence_of_element_located((By.NAME, "birthdate"))) # 移除输入框的readonly属性 driver.execute_script("arguments[0].removeAttribute('readonly')", birthdate_input) # 生成符合页面要求格式的今日日期,格式不匹配可调整strftime参数 today = datetime.date.today().strftime("%Y-%m-%d") # 给输入框赋值 driver.execute_script(f"arguments[0].value = '{today}'", birthdate_input)
如果页面要求的日期格式不是yyyy-MM-dd,调整strftime的格式参数即可,例如需要日月年格式就改为"%d-%m-%Y"。
方案2:模拟用户点击日期选择器选择
如果要求必须模拟真实用户操作点击日期选择器,按以下步骤实现:
- 点击输入框唤起日期选择器面板
- 定位到日期面板中代表今日的元素,可匹配今日的日期数字进行定位
- 点击该元素完成选择
对应代码:
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 import datetime if __name__ == "__main__": driver = webdriver.Chrome() # 访问目标页面的逻辑自行补充 wait = WebDriverWait(driver, 10) # 点击输入框唤起日期选择器 birthdate_input = wait.until(EC.element_to_be_clickable((By.NAME, "birthdate"))) birthdate_input.click() # 获取今日的日期数字 today_day = str(datetime.date.today().day) # 定位对应日期的元素并点击 today_element = wait.until(EC.element_to_be_clickable((By.XPATH, f'//div[contains(@class,"calendars-month-row")]//a[text()="{today_day}"]'))) today_element.click()
原代码错误原因
你之前的代码直接点击了calendars-month-row整个容器,触发的是容器内默认选中的日期元素的点击事件,所以每次都会填入固定的默认选中日期,无法匹配今日日期。
内容的提问来源于stack exchange,提问作者Samer Adnan
相关产品推荐
相关产品推荐

