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

Python Selenium如何查找span元素文本 定位目标元素执行点击

问题原因

你的代码跑不通有三个核心问题:

  • 初始定位的容器类名错误:你写的是查找class="sub-menu"的元素,但你贴出的HTML里,包含「My Work」的一级菜单根本不在sub-menu容器下,页面里嵌套的二级菜单用的类名是sub-menu-2,你拿到的main_div集合从一开始就没包含目标元素所在的区域,自然找不到对应节点。
  • 遍历逻辑写法错误:find_element()只会返回单个匹配的元素对象,本身不是可迭代结构,你直接用for循环遍历它会直接抛出类型错误;而且你没有校验span的文本内容,就算定位到span节点也没法精准筛选出文本为「My Work」的目标。
  • 没有做可交互判断:页面里部分二级菜单默认是display: none的隐藏状态,如果提前定位隐藏元素直接点击,会触发「元素不可交互」的报错。
修正后的遍历实现

修复原有逻辑的错误点,可正常运行的代码如下:

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

# 直接查找所有菜单选项的span节点,不需要先定位错误的sub-menu容器
all_menu_spans = driver.find_elements(By.CLASS_NAME, "leaf_line_item")
target_element = None

for span in all_menu_spans:
    # 用strip()去掉文本前后的空格、换行,避免因为多余空白字符匹配失败
    if span.text.strip() == "My Work":
        target_element = span
        break

if target_element:
    # 等元素可点击之后再操作,避免元素未加载、被遮挡的问题
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable(target_element))
    target_element.click()
else:
    raise Exception("未找到「My Work」菜单选项")
更简洁的最优方案

不需要写循环遍历,直接用XPath按文本精准定位,一步完成查找+等待+点击:

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

# XPath里用normalize-space()自动处理文本前后的空白、换行,匹配稳定性更高
my_work_button = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable(
        (By.XPATH, '//span[@class="leaf_line_item" and normalize-space(text())="My Work"]')
    )
)
my_work_button.click()

注意:如果菜单默认是折叠隐藏状态,先执行展开菜单的操作,等菜单完全渲染后再做元素定位和点击,不要在菜单隐藏时提前查找元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:42:19