You need to enable JavaScript to run this app. Python Selenium操作mol.org搜索栏触发ElementNotInteractableException问题
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium操作mol.org搜索栏触发ElementNotInteractableException问题

问题原因分析
  • 你使用的presence_of_element_located仅判断元素被加载到DOM树中,不代表元素已经渲染可见、没有被其他元素遮挡,这是触发ElementNotInteractableException异常最常见的原因
  • 你写的XPath匹配逻辑精度不足,可能定位到了页面中隐藏的同规则input元素,你拿到的第一个元素实际是不可交互的隐藏元素
  • 部分站点的输入框会监听focus事件才会激活输入权限,未激活状态下直接调用send_keys会被前端逻辑拦截
修复后的代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

search_query = 'Egypt'
# 更换更精准的定位逻辑,直接匹配可交互的搜索输入框
search_bar_css = '.region-search input[type="search"]'
url = 'https://mol.org/regions/?regiontype=countries'

with webdriver.Chrome() as driver:
    # 先最大化窗口避免元素被视口边界遮挡
    driver.maximize_window()
    wait = WebDriverWait(driver, 15)
    driver.get(url)
    # 替换presence为visibility_of_element_located,等待元素完全可见
    search_bar = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, search_bar_css)))
    # 滚动到元素位置确保处于视口内
    driver.execute_script("arguments[0].scrollIntoViewIfNeeded(true);", search_bar)
    # 清空默认占位符后输入内容
    search_bar.clear()
    search_bar.send_keys(search_query)
    # 等待搜索联想项加载完成后再触发回车搜索
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.tt-suggestion')))
    search_bar.send_keys(Keys.RETURN)

    driver.close()
额外兼容方案

如果还是触发交互异常,可以直接用JS赋值绕过前端交互限制,代码示例如下:

# 直接给输入框赋值,跳过模拟输入的校验
driver.execute_script(f"arguments[0].value = '{search_query}';", search_bar)
# 手动触发输入框的change事件激活搜索逻辑
driver.execute_script("arguments[0].dispatchEvent(new Event('change'));", search_bar)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 19:12:02