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

