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

Python Selenium点击JS动态菜单Properties下Versions的实现方法

定位失败核心原因

你之前的代码无法完成操作,本质是三个逻辑问题:

  • 缺少前置触发步骤:功能菜单默认处于隐藏状态,必须先点击表格行内第二个无文本的<a>标签,触发showFunctionMenu2脚本渲染主菜单,否则Properties元素不会出现在可交互的DOM树中
  • 交互逻辑不匹配:Properties的子菜单是鼠标悬停触发,不是点击触发,直接点击Properties链接无法唤起子菜单
  • 等待条件不合理:presence_of_element_located仅判断元素存在DOM结构中,无法保证元素可见、可交互,很容易定位到隐藏的无效元素
正确实现步骤
  1. 先点击行内第二个无文本的<a>触发按钮,等待主功能菜单加载完成
  2. 模拟鼠标悬停在Properties菜单项上,触发绑定的onmouseover事件展开子菜单
  3. 等待Versions子选项变为可点击状态后,执行点击操作
完整实现代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import TimeoutException

delay = 10 # 替换为你实际需要的超时时间
driver = webdriver.Chrome() # 替换为你实际使用的浏览器驱动
wait = WebDriverWait(driver, delay)
actions = ActionChains(driver)

try:
    # 第一步:定位行容器,点击第二个a标签唤起主菜单
    row_td = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "browseItemName")))
    # 取td下第二个a标签,就是无文本的菜单触发按钮
    menu_trigger = row_td.find_elements(By.TAG_NAME, "a")[1]
    menu_trigger.click()

    # 第二步:悬停Properties菜单项,展开子菜单
    properties_entry = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Properties")))
    actions.move_to_element(properties_entry).perform()

    # 第三步:点击Versions选项
    versions_entry = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Versions")))
    versions_entry.click()
    print("导航操作完成")

except TimeoutException:
    print("元素加载超时,请检查页面加载状态")
注意事项
  • 如果页面存在多行表格(多个带browseItemName class的td),需要先定位到你要操作的目标行,再查找内部的菜单触发按钮,避免点错行
  • 不要直接点击Properties的a标签,它的href绑定的是单独的JS逻辑,直接点击不会触发子菜单展开,必须用move_to_element模拟真实鼠标悬停行为
  • 所有交互步骤优先用element_to_be_clickable作为等待条件,同时校验元素存在、可见、可交互三个状态,减少无效报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:01:47