使用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
相关产品推荐
相关产品推荐

