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

Selenium登录网站send_keys时报element not interactable错误如何解决

Selenium调用send_keys触发ElementNotInteractableException报错解决方案

报错核心原因

你定位到的密码输入框元素当前处于不可交互状态,常见触发场景包括:元素未完成加载、被其他弹窗/浮层遮挡、需要先点击激活才可输入、定位到的是隐藏态的同class元素。

可落地解决方案

方案1:添加显式等待,等待元素可交互后再操作

避免因页面未渲染完成就操作触发的报错,代码示例:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 最长等待10秒,直到密码输入框可点击
wait = WebDriverWait(browser, 10)
password_input = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".loginInputs .passwordInput")))
password_input.send_keys("password")

方案2:先点击激活输入框再输入

部分站点对输入框做了安全限制,需要主动点击激活后才允许输入内容,修改代码如下:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

wait = WebDriverWait(browser, 10)
password_input = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".loginInputs .passwordInput")))
# 先点击激活输入框
password_input.click()
password_input.send_keys("password")

方案3:通过JS注入输入内容,绕过前端交互限制

如果以上方案都不生效,可直接通过执行JS代码给输入框赋值,无需考虑元素是否可交互:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

wait = WebDriverWait(browser, 10)
password_input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".loginInputs .passwordInput")))
# 执行JS赋值
browser.execute_script("arguments[0].value = 'password'", password_input)

额外注意事项

你当前使用的find_element_by_class_name方法在Selenium 4.0+版本中已经被废弃,建议统一使用find_element(By.CLASS_NAME, 类名)或者CSS选择器写法,避免版本兼容问题。

内容的提问来源于stack exchange,提问作者Andrés Mireles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:54:03