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

使用Python/Selenium时遇到Element not Interactable异常求助

解决Selenium无法输入密码框的Element not Interactable异常

问题分析

出现Element not Interactable异常,通常是因为定位到的元素当前处于不可交互状态——可能是页面存在多个同名元素导致代码定位到错误对象,或者元素被遮挡、尚未完全渲染可见。

解决方案

方案1:使用更精准的元素定位

排查页面中是否存在多个name="password"的元素,改用结合父节点的XPath来精准定位登录表单内的密码框:

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
from webdriver_manager.chrome import ChromeDriverManager

username = 'example@hotmail.com'
password = 'password123'

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://myaccount.play-cricket.com/')

wait = WebDriverWait(driver, 20)
# 显式等待用户名框可见并输入
username_input = wait.until(EC.visibility_of_element_located((By.NAME, 'email')))
username_input.send_keys(username)

# 通过XPath定位登录表单内的密码框,避免匹配到其他同名元素
password_input = wait.until(EC.element_to_be_clickable((By.XPATH, '//form[@id="new_user"]//input[@name="password"]')))
password_input.send_keys(password)

方案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
from webdriver_manager.chrome import ChromeDriverManager

username = 'example@hotmail.com'
password = 'password123'

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://myaccount.play-cricket.com/')

wait = WebDriverWait(driver, 20)
username_input = wait.until(EC.visibility_of_element_located((By.NAME, 'email')))
username_input.send_keys(username)

# 先等待元素存在,再滚动到可见位置
password_input = wait.until(EC.presence_of_element_located((By.NAME, 'password')))
driver.execute_script("arguments[0].scrollIntoView(true);", password_input)
# 等待元素可点击后输入
wait.until(EC.element_to_be_clickable((By.NAME, 'password'))).send_keys(password)

方案3:替换固定等待为显式等待

原代码中的time.sleep(5)是固定时长等待,可能页面未加载完成就执行后续操作,改用显式等待登录表单加载完成:

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
from webdriver_manager.chrome import ChromeDriverManager

username = 'example@hotmail.com'
password = 'password123'

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://myaccount.play-cricket.com/')

wait = WebDriverWait(driver, 20)
# 等待登录表单加载完成,替代time.sleep
wait.until(EC.presence_of_element_located((By.ID, 'new_user')))

username_input = wait.until(EC.visibility_of_element_located((By.NAME, 'email')))
username_input.send_keys(username)

password_input = wait.until(EC.element_to_be_clickable((By.NAME, 'password')))
password_input.send_keys(password)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:40:57