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

如何使用Selenium点击鼠标悬停触发的JS下拉菜单?

解决方案

对于这种鼠标悬停才显示、基于JavaScript实现的非原生下拉菜单,Selenium的Select类完全不适用——因为Select仅针对HTML原生<select>标签设计。你需要通过模拟鼠标悬停触发菜单显示,再定位选项完成点击,具体实现如下:

步骤说明

  • 导入ActionChains用于模拟鼠标动作,导入WebDriverWait和expected_conditions实现显式等待(比time.sleep更稳定)
  • 定位触发下拉的按钮元素
  • 模拟鼠标悬停在按钮上,触发下拉菜单显示
  • 等待目标选项加载完成后,执行点击操作

修改后的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options

options = Options()
# options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--ignore-certificate-errors')

capabilities = options.to_capabilities()
capabilities['acceptInsecureCerts'] = True

driver = webdriver.Chrome('chromedriver', options=options, desired_capabilities=capabilities)
driver.get(url)

# 用显式等待替代time.sleep,等待frame加载完成
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(1))

# 定位触发下拉的按钮
button = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, 'link5')))

# 模拟鼠标悬停,触发下拉菜单显示
ActionChains(driver).move_to_element(button).perform()

# 等待目标选项加载完成并点击(这里需要替换成你实际要选择的选项定位器,比如By.XPATH/By.CLASS_NAME等)
target_option = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="your-option-id"]')))
target_option.click()

# 操作完成后可关闭浏览器
# driver.quit()

关键注意点

  • 替换代码中your-option-id为实际选项的定位符(可以用浏览器开发者工具获取选项的XPath、class name等)
  • 始终优先使用显式等待替代time.sleep,避免因页面加载慢导致的元素定位失败
  • 如果悬停后菜单仍未显示,可尝试在move_to_element后添加短暂的time.sleep(0.5)(仅作为兜底方案)

内容的提问来源于stack exchange,提问作者O. Mortosa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 11:02:14