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

Selenium技术求助:如何获取a标签下span值并点击对应div?

问题描述

需要用Selenium完成两个操作:

  1. 获取<a>标签下<span>元素的文本值
  2. 点击该<a>标签内的<div>元素
    尝试用绝对XPath定位但失败,原代码和网页结构如下:

原代码

xpath_cantidad_seguidos='/html/body/div[1]/div/div/div/div[1]/div/div/div/div[1]/section/main/div/header/section/ul/li[3]/a/div/span'
xpath_boton_seguidos='/html/body/div[1]/div/div/div/div[1]/div/div/div/div[1]/section/main/div/header/section/ul/li[3]/a/div'
WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.XPATH, xpath_cantidad_seguidos)))
sleep(9)
cantidad_seguidos=browser.find_element("xpath", xpath_cantidad_seguidos)
WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.XPATH, xpath_boton_seguidos)))
button_seguidos=browser.find_element("xpath", xpath_boton_seguidos).click()

目标网页结构

<a class="x1i10hfl xjbqb8w x6umtig x1b1mbwd xaqea5y xav7gou x9f619 x1ypdohk xt0psk2 xe8uvvx xdj266r x11i5rnm xat24cr x1mh8g0r xexx8yu x4uap5 x18d9i69 xkhd6sd x16tdsg8 x1hl2dhg xggy1nq x1a2a7pz _a6hd" href="/fitvital.es/following/" role="link" tabindex="0">
  <div class="_aacl _aacp _aacu _aacx _aad6 _aade">
    <span class="_ac2a">98</span> seguidos
  </div>
</a>
解决方案

问题出在绝对XPath过于脆弱,网页结构稍有变化就会失效。改用基于元素属性和层级关系的相对定位,稳定性会大幅提升:

1. 获取<span>的文本值

可以通过<span>的专属类名_ac2a定位,或者结合<a>的href属性缩小范围:

# 方法1:直接通过span的类名定位
cantidad_seguidos = WebDriverWait(browser, delay).until(
    EC.visibility_of_element_located((By.CLASS_NAME, "_ac2a"))
).text

# 方法2:结合a标签的href属性定位span
xpath_span = '//a[@href="/fitvital.es/following/"]//span[@class="_ac2a"]'
cantidad_seguidos = WebDriverWait(browser, delay).until(
    EC.visibility_of_element_located((By.XPATH, xpath_span))
).text

注意:用visibility_of_element_located代替presence_of_element_located,确保元素可见后再获取文本,避免空值。

2. 点击<a>内的<div>元素

用相对定位,比如通过<div>的类名,或者关联<a>的属性:

# 方法1:通过div的类名定位
div_element = WebDriverWait(browser, delay).until(
    EC.element_to_be_clickable((By.CLASS_NAME, "_aacl"))
)
div_element.click()

# 方法2:结合a标签的href定位div
xpath_div = '//a[@href="/fitvital.es/following/"]//div[@class="_aacl _aacp _aacu _aacx _aad6 _aade"]'
div_element = WebDriverWait(browser, delay).until(
    EC.element_to_be_clickable((By.XPATH, xpath_div))
)
div_element.click()

用element_to_be_clickable确保元素可点击后再执行点击操作,避免点击失效。

优化后的完整代码

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

# 获取span文本
xpath_span = '//a[@href="/fitvital.es/following/"]//span[@class="_ac2a"]'
cantidad_seguidos = WebDriverWait(browser, delay).until(
    EC.visibility_of_element_located((By.XPATH, xpath_span))
).text
print(f"关注人数:{cantidad_seguidos}")

# 点击div元素
xpath_div = '//a[@href="/fitvital.es/following/"]//div[@class="_aacl _aacp _aacu _aacx _aad6 _aade"]'
WebDriverWait(browser, delay).until(
    EC.element_to_be_clickable((By.XPATH, xpath_div))
).click()

关键注意事项

  • 去掉不必要的sleep(9),用WebDriverWait的显式等待替代,既高效又稳定。
  • 优先使用元素的专属属性(如唯一类名、href)定位,避免依赖绝对路径。
  • 根据操作类型选择合适的等待条件:获取文本用visibility_of_element_located,点击用element_to_be_clickable。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:45:36