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

如何用Selenium选择非Select下拉菜单选项并解决元素不可交互报错

问题根因

  • 该下拉为自定义实现,未使用原生Select标签,无法通过Select类操作;你之前操作的始终是下拉的触发按钮,没有定位到展开后才加载的Custom选项元素,同时未等待元素完全可交互就执行操作,因此触发ElementNotInteractableException报错。
  • 原代码未导入time模块就调用time.sleep,也存在隐性报错。

修正方案

按「触发下拉展开→等待目标选项加载可交互→点击选项」的逻辑修改代码即可,参考代码如下:

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

url = 'https://www.mergermarket.com/homepage'
driver = webdriver.Chrome() # 可替换为对应浏览器驱动
driver.get(url)
# 等待deals元素可点击再跳转
deals = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, '//*[@id="header"]/div/div[2]/nav/ul/li[4]/a'))
)
urldeals = deals.get_attribute("href")
driver.get(urldeals)

# 等待下拉触发元素可点击,点击展开下拉
dropdown_trigger = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, '//*[@id="searchCriteriaSummary"]/div[4]/div/div[2]/div/div[1]/div[2]/div/div/div[1]/div[1]'))
)
dropdown_trigger.click()

# 等待Custom选项加载可点击后点击
custom_option = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//*[text()='Custom' and not(contains(@style,'display:none'))]"))
)
custom_option.click()

可选优化点

  • 尽量用文本匹配、属性匹配的方式定位元素,避免过长的层级XPATH,页面结构变动时更不容易失效
  • 优先用显式等待替代强制sleep,提升脚本执行效率和稳定性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:24:03