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

Python Selenium遍历span类按钮元素获取对应href定位失败求助

解决方案

问题原因说明

你之前的代码定位失败主要有两个核心原因:

  • 元素是动态生成的,代码执行定位时页面还没渲染出目标元素,直接查找自然返回空列表
  • CSS选择器语法错误:多类名选择需要用.连接类名,且你写的类是按钮外层的类,没有对应到你要找的mb-text类span元素

具体实现代码

首先导入显式等待相关依赖,等元素全部加载完成再定位,再遍历获取对应href值:

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

# 初始化driver的原有代码保留,以下是核心逻辑
wait = WebDriverWait(driver, 10) # 最长等待10秒,可根据页面加载速度自行调整

# 等待所有class为mb-text的span元素加载完成
span_elements = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//span[contains(@class, 'mb-text')]")))

href_list = []
for span in span_elements:
    # 通常按钮形式的span外层会包裹a标签,href存储在a标签上,所以取父级a元素的href属性
    a_tag = span.find_element(By.XPATH, "./ancestor::a[1]")
    href = a_tag.get_attribute("href")
    if href:
        href_list.append(href)

# 输出所有获取到的href
print(href_list)

如果你用的是Selenium 3.x旧版本,把find_element(By.XXX, 路径)改成对应的find_element_by_xxx写法即可,显式等待的逻辑不需要变动。

可选优化点

  • 如果确认mb-text是span的唯一类名,没有其他类拼接,可以把XPath改成//span[@class='mb-text'],匹配精度更高
  • 如果href直接存在span元素上(极少见的场景),直接把a_tag.get_attribute改成span.get_attribute即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:18:03