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
相关产品推荐
相关产品推荐

