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

