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

Selenium开发金融聊天机器人时遇ElementNotInteractableException错误求助

问题

使用Selenium开发金融领域聊天机器人时,操作screener.in首页搜索框输入内容触发ElementNotInteractableException错误。

原代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time

# Initialize Chrome driver
driver = webdriver.Chrome()

# Navigate to the webpage
driver.get('https://www.screener.in/home/')  

# Find the search input element by class name 
search_input = driver.find_element(By.CLASS_NAME,'home-search')

# Interact with the input element (e.g., send keys)
search_input.send_keys('IOCL') 


time.sleep(10)

driver.quit()

错误信息:

---------------------------------------------------------------------------
ElementNotInteractableException           Traceback (most recent call last)
Cell In[34], line 16
     13 search_input = driver.find_element(By.CLASS_NAME,'home-search')
     15 # Interact with the input element (e.g., send keys)
---> 16 search_input.send_keys('IOCL')  # Example input value 'IOCL'
     18 #print(search_input)
     19 
     20 # Do other operations as needed...
     22 time.sleep(10)

File c:\Python312\Lib\site-packages\selenium\webdriver\remote\webelement.py:231, in WebElement.send_keys(self, *value)
    228             remote_files.append(self._upload(file))
    229         value = "\n".join(remote_files)
--> 231 self._execute(
    232     Command.SEND_KEYS_TO_ELEMENT, {"text": "".join(keys_to_typing(value)), "value": keys_to_typing(value)}
    233 )

File c:\Python312\Lib\site-packages\selenium\webdriver\remote\webelement.py:395, in WebElement._execute(self, command, params)
    393     params = {}
    394 params["id"] = self._id
--> 395 return self._parent.execute(command, params)

File c:\Python312\Lib\site-packages\selenium\webdriver\remote\webdriver.py:347, in WebDriver.execute(self, driver_command, params)
    345 response = self.command_executor.execute(driver_command, params)
...
    (No symbol) [0x00007FF634391052]
    (No symbol) [0x00007FF6343818A4]
    BaseThreadInitThunk [0x00007FFBBD291F88+24]
    RtlUserThreadStart [0x00007FFBBED60B81+33]

解决方案

1. 等待元素可交互后操作

ElementNotInteractableException大多是因为元素未加载完成或未处于可交互状态,用显式等待替代time.sleep更可靠:

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

driver = webdriver.Chrome()
driver.get('https://www.screener.in/home/')  

# 等待搜索框可交互,最长等待10秒
search_input = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CLASS_NAME, 'home-search'))
)

search_input.send_keys('IOCL') 

time.sleep(10)
driver.quit()

2. 精准定位元素

检查home-search类是否对应真正的input标签,外层容器可能复用类名导致选中不可交互元素,改用更精准的选择器:

search_input = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, 'input.home-search'))
)

3. 处理遮挡元素

页面可能存在cookie弹窗、广告遮挡搜索框,先关闭遮挡物:

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

driver = webdriver.Chrome()
driver.get('https://www.screener.in/home/')  

# 处理cookie弹窗
try:
    accept_cookie = WebDriverWait(driver, 5).until(
        EC.element_to_be_clickable((By.XPATH, '//button[contains(text(), "Accept")]'))
    )
    accept_cookie.click()
except:
    pass  # 无弹窗则跳过

# 等待搜索框可交互
search_input = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, 'input.home-search'))
)

search_input.send_keys('IOCL') 

time.sleep(10)
driver.quit()

4. 先激活输入框再输入

部分输入框需要点击激活才能输入,在send_keys前执行点击操作:

search_input.click()
search_input.send_keys('IOCL')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:46:36