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

使用Selenium+WebDriver时Chrome自动关闭及ElementNotInteractableException问题求助

问题描述

使用Selenium+ChromeDriver编写自动化程序时,Chrome浏览器打开后突然关闭,执行以下代码报错ElementNotInteractableException:

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://www.youtube.com/")
searchbox = driver.find_element('xpath', '//*[@id="search-input"]')
searchbox.send_keys("animeballsdeep")

searchButton = driver.find_element('xpath', '//*[@id="search-icon-legacy"]')
searchButton.click()

报错信息:

Traceback (most recent call last):
  File "main.py", line 7, in <module>
    searchbox.send_keys("animeballsdeep")
  File "/opt/homebrew/Caskroom/miniforge/base/envs/mlp/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 231, in send_keys
    self._execute(
  File "/opt/homebrew/Caskroom/miniforge/base/envs/mlp/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 404, in _execute
    return self._parent.execute(command, params)
  File "/opt/homebrew/Caskroom/miniforge/base/envs/mlp/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 440, in execute
    self.error_handler.check_response(response)
  File "/opt/homebrew/Caskroom/miniforge/base/envs/mlp/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 245, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
  (Session info: chrome=112.0.5615.49)
Stacktrace:
0   chromedriver                        0x0000000100e01670 chromedriver + 4298352
1   chromedriver                        0x0000000100df9bbc chromedriver + 4266940
2   chromedriver                        0x0000000100a2c5dc chromedriver + 280028
3   chromedriver                        0x0000000100a60cac chromedriver + 494764
4   chromedriver                        0x0000000100a60340 chromedriver + 492352
5   chromedriver                        0x0000000100a5bb90 chromedriver + 474000
6   chromedriver                        0x0000000100aa0080 chromedriver + 753792
7   chromedriver                        0x0000000100a5a2d0 chromedriver + 467664
8   chromedriver                        0x0000000100a5b354 chromedriver + 471892
9   chromedriver                        0x0000000100dc16c4 chromedriver + 4036292
10  chromedriver                        0x0000000100dc5c64 chromedriver + 4054116
11  chromedriver                        0x0000000100dcc2d8 chromedriver + 4080344
12  chromedriver                        0x0000000100dc6970 chromedriver + 4057456
13  chromedriver                        0x0000000100d9d8dc chromedriver + 3889372
14  chromedriver                        0x0000000100de525c chromedriver + 4182620
15  chromedriver                        0x0000000100de53b4 chromedriver + 4182964
16  chromedriver                        0x0000000100df40f4 chromedriver + 4243700
17  libsystem_pthread.dylib             0x000000019dae7fa8 _pthread_start + 148
18  libsystem_pthread.dylib             0x000000019dae2da0 thread_start + 8
原因分析
  • 元素定位错误://*[@id="search-input"]是搜索框的容器div,并非实际接收输入的input标签,容器本身不可交互
  • 页面未完全加载:代码执行速度快于YouTube页面渲染,即使找到元素,它还没处于可交互状态
  • 浏览器自动关闭:脚本执行完毕后,driver对象被Python垃圾回收,Chrome进程随之终止
解决办法

1. 修正元素定位

定位到实际可输入的input标签,YouTube搜索框的input标签可用//input[@id="search"]

2. 添加显式等待

使用Selenium的WebDriverWait等待元素可交互,避免因页面未加载完成导致的错误

3. 阻止浏览器自动关闭

可以在脚本末尾添加input()保持会话,或者配置Chrome选项让浏览器保持打开

修改后的代码

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

# 初始化driver,配置保持浏览器打开
options = webdriver.ChromeOptions()
options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=options)

driver.get("https://www.youtube.com/")

# 显式等待搜索框可交互,最长等待10秒
searchbox = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "search"))
)
searchbox.send_keys("animeballsdeep")

# 等待搜索按钮可交互并点击
searchButton = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "search-icon-legacy"))
)
searchButton.click()

# 可选:手动触发关闭
# input("Press Enter to close...")
# driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:15:38