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

Python中Selenium遇ElementNotInteractableException:元素可见却无法滚动至视图

解决Selenium点击按钮时的ElementNotInteractableException错误

问题说明

编写了一段Python代码,功能为打开Firefox浏览器访问指定页面,关闭“接受Cookie”弹窗,滚动页面后点击“Carica Altro”按钮。但点击按钮时触发错误:

ElementNotInteractableException: Message: Element

实际该元素在UI界面中是可见的。

原代码

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 selenium.webdriver.firefox.options import Options as FirefoxOptions
from selenium.webdriver.common.action_chains import ActionChains
import time

my_url='https://www.raiplay.it/programmi/winxclub/episodi/stagione-5'

def main():
  options = FirefoxOptions()
  browser = webdriver.Firefox(options=options)
  browser.implicitly_wait(10)
  browser.get(my_url)
  wait = WebDriverWait(browser, 30)
  try:
    wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "as-oil__btn-primary.as-js-optin"))).click()
    print('Clicked successfully')
  except:
    print('Could not click')
    pass

  l =browser.find_element(By.CLASS_NAME,"button.button--primary.medium.expanded")
  browser.execute_script('window.scrollBy(0, 1500)') 

  time.sleep(10)
  l.click()
  return

解决思路及方案

出现该错误的核心原因是:元素视觉上可见,但Selenium的交互检查机制判定元素未处于可点击状态,比如被页面元素遮挡、滚动后元素位置未被正确识别,或是元素尚未完全加载完成。

方案1:滚动到元素所在位置(推荐)

不要使用固定距离滚动,而是直接让页面滚动到目标元素的可视区域(居中显示避免被导航栏等遮挡):

browser.execute_script("arguments[0].scrollIntoView({block: 'center'});", 目标元素)

方案2:用显式等待替代固定休眠

time.sleep()是固定等待,无法适配页面加载的差异,改用显式等待确保元素完全可交互:

wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "button.button--primary.medium.expanded"))).click()

方案3:JavaScript强制点击

如果前两种方法无效,可绕过Selenium的交互检查,直接通过JS触发点击:

browser.execute_script("arguments[0].click();", 目标元素)

修改后的完整代码

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 selenium.webdriver.firefox.options import Options as FirefoxOptions

my_url='https://www.raiplay.it/programmi/winxclub/episodi/stagione-5'

def main():
  options = FirefoxOptions()
  browser = webdriver.Firefox(options=options)
  browser.implicitly_wait(10)
  browser.get(my_url)
  wait = WebDriverWait(browser, 30)
  
  # 处理Cookie弹窗
  try:
    wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "as-oil__btn-primary.as-js-optin"))).click()
    print('已点击接受Cookie')
  except Exception as e:
    print(f'未找到Cookie弹窗或点击失败:{e}')
    pass

  # 等待按钮加载并滚动到元素位置
  load_more_btn = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "button.button--primary.medium.expanded")))
  browser.execute_script("arguments[0].scrollIntoView({block: 'center'});", load_more_btn)
  
  # 等待元素可点击后执行点击
  wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "button.button--primary.medium.expanded"))).click()
  
  # 操作完成后关闭浏览器
  browser.quit()

if __name__ == "__main__":
  main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:38:09