使用Selenium填充Google Form日期无法识别无法点击下一步如何解决
问题根源
- 直接通过
execute_script修改输入框的value属性,不会触发Google Form绑定的input、change等表单校验事件,表单会判定该日期字段未完成填写,因此锁定下一步按钮 - 你使用的下一步按钮CSS选择器为完整层级路径,稳定性极差,Google Form前端结构稍有调整就会定位失败,导致点击操作无效
解决方案
核心修正点
- 日期填充改用Selenium原生
send_keys方法,原生输入会自动触发所有前端绑定事件,表单可以正常识别填入的内容 - 优化下一步按钮的定位逻辑,改用更稳定的定位方式,同时添加显式等待确保按钮可点击后再操作
- 适配Selenium新版语法,替换已弃用的
find_element_by_css_selector方法
修正后可运行代码
from selenium import webdriver import time from datetime import datetime from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC # 注意:如果你的Google Form日期字段要求的格式不是年-月-日,需要调整strftime的格式参数 today_date = datetime.today().strftime('%Y-%m-%d') driver = webdriver.Chrome() wait = WebDriverWait(driver, 30) driver.get("https://forms.gle/VUwbshGuXxDb7NRbA") time.sleep(1) # 填充日期部分修正 date_input = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.quantumWizTextinputPaperinputInput"))) date_input.clear() # 先清空输入框默认值 date_input.send_keys(today_date) # 原生输入触发事件 # 备选方案:如果send_keys无效,可改用手动触发事件的写法 # driver.execute_script(f"arguments[0].setAttribute('value', '{today_date}')", date_input) # driver.execute_script("arguments[0].dispatchEvent(new Event('input', { bubbles: true }))", date_input) # driver.execute_script("arguments[0].dispatchEvent(new Event('change', { bubbles: true }))", date_input) # 下一步按钮定位修正,优先按文本定位,稳定性更高 # 如果表单是中文版本,把'Next'改成'下一步'即可 next_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Next']/ancestor::div[@role='button']"))) next_btn.click()
额外注意事项
- 如果运行后依然提示日期格式错误,调整
strftime的格式参数适配表单要求,比如美国区常用的%m/%d/%Y格式 - 尽量不要用绝对层级的CSS选择器定位元素,优先用属性、文本等特征定位,避免表单结构更新后代码失效
内容的提问来源于stack exchange,提问作者Pas Connu
相关产品推荐
相关产品推荐

