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

使用Selenium WebDriver填写fast2sms注册表单日期字段报错如何解决

Selenium操作fast2sms注册页出生日期字段报错解决方案

问题根因

抛出ElementNotInteractableException的核心原因是该出生日期输入框默认设置了readonly只读属性,禁止用户直接输入内容,只能通过配套的日期选择器选择值,所以直接调用send_keys方法会触发交互异常。

解决方案

方案1:通过JavaScript直接操作输入框(推荐)

该方案无需操作复杂的日期选择器节点,兼容性高、代码简洁,优先选择:

# 定位出生日期输入框
dob_field = driver.find_element_by_css_selector('input[name="signup_dob"]')
# 执行JS代码移除输入框的只读属性
driver.execute_script("arguments[0].removeAttribute('readonly')", dob_field)
# 清空默认值后写入生成的日期
dob_field.clear()
dob_field.send_keys(dob)

如果移除只读属性后send_keys依然失效,可以直接通过JS给输入框赋值:

driver.execute_script(f"arguments[0].value = '{dob}'", dob_field)

方案2:模拟真实用户操作日期选择器

如果需要完全模拟真实用户的点击选择操作,可以使用该方案:

# 点击输入框唤起日期选择器
dob_field.click()
# 等待日期选择器加载完成后按顺序选择年、月、日
# 选择1990年
year_opt = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//span[@class="year" and text()="1990"]')))
year_opt.click()
# 选择1月(月份选项索引从0开始,1月对应第一个选项)
month_opt = driver.find_element(By.XPATH, '//span[@class="month" and text()="Jan"]')
month_opt.click()
# 选择2号
day_opt = driver.find_element(By.XPATH, '//td[@class="day" and text()="2"]')
day_opt.click()

注:该方案的元素选择器需要根据页面日期组件的实际类名、文本内容微调,如果页面日期选择器结构有更新需要同步修改定位逻辑。

注意事项

如果通过JS赋值后,表单校验依然提示出生日期未填写,说明页面监听了输入框的change事件,需要主动触发一次事件通知页面值已更新:

driver.execute_script("arguments[0].dispatchEvent(new Event('change'))", dob_field)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:57:02