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

如何用Selenium提取span标签title属性中的目标数值

问题:Selenium无法定位JavaScript生成的span元素并提取title属性值

需要提取由DEAL_SUMMARY_HEADER3组件生成的<span>标签的title属性值£19,649,981.19,页面可正常访问,但使用指定XPath查找元素时返回空列表。

待提取元素的HTML代码

<span title="£19,649,981.19" class="right-Align">£19,650.0k</span>

原使用的XPath信息

XPATH: //*[@id="HEADER_HEADER_3_ADVANCE_HEADER_0LOAN_OUTSTANDING"]/span
Full XPATH: /html/body/div[3]/div[3]/div[1]/headers/div/header[1]/div/div/div[1]/div[1]/h1/span/span

原测试代码及输出

测试代码

import time
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.edge.service import Service as EdgeService
from webdriver_manager.microsoft import EdgeChromiumDriverManager

# Setup Edge WebDriver
edge_service = EdgeService(EdgeChromiumDriverManager().install())
driver = webdriver.Edge(service=edge_service)

try:
    WebDriverWait(driver, 30).until(EC.url_contains("dashboard"))
    desired_url = "Example.com"
    driver.get(desired_url)

    time.sleep(10)

    print("Title of the Webpage is =", driver.title)

    span_elements = driver.find_elements(By.XPATH, '/html/body/div[3]/div[3]/div[1]/headers/div/header[1]/div/div/div[1]/div[1]/h1/span/span')
    print(span_elements)

    span_elements1 = driver.find_elements(By.XPATH, '//*[@id="HEADER_HEADER_3_ADVANCE_HEADER_0LOAN_OUTSTANDING"]/span')
    print(span_elements1)

finally:
    # Close the browser
    driver.quit()

输出结果

Title of the Webpage is =Overview Data
[]
[]

解决方法

1. 修正页面访问逻辑

原代码先等待URL包含"dashboard"再跳转目标页面,逻辑错误,应先访问目标URL再等待加载完成:

desired_url = "Example.com"
driver.get(desired_url)
# 等待页面加载完成,验证标题或关键元素
WebDriverWait(driver, 30).until(EC.title_contains("Overview Data"))

2. 替换固定等待为显式等待

time.sleep(10)无法保证元素已渲染完成,改用显式等待针对目标元素:

# 等待元素可见
target_span = WebDriverWait(driver, 30).until(
    EC.visibility_of_element_located((By.XPATH, '//span[@class="right-Align"]'))
)
# 提取title属性值
amount = target_span.get_attribute("title")

3. 优化XPath定位规则

原XPath依赖父元素ID或绝对路径,易因页面结构变化失效,改用更稳定的定位方式:

  • 按class+属性组合定位://span[@class="right-Align" and contains(@title, "£")]
  • 若元素唯一,可简化为://span[@class="right-Align"]

4. 检查并处理iframe嵌套

若元素位于iframe内,需先切换到iframe再定位:

try:
    iframe = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "iframe")))
    driver.switch_to.frame(iframe)
except:
    pass  # 无iframe则跳过

操作完成后需切回主文档:driver.switch_to.default_content()


修改后的完整测试代码

import time
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.edge.service import Service as EdgeService
from webdriver_manager.microsoft import EdgeChromiumDriverManager

# Setup Edge WebDriver
edge_service = EdgeService(EdgeChromiumDriverManager().install())
driver = webdriver.Edge(service=edge_service)

try:
    desired_url = "Example.com"
    driver.get(desired_url)
    
    # 等待页面加载完成
    WebDriverWait(driver, 30).until(EC.title_contains("Overview Data"))
    print("Title of the Webpage is =", driver.title)

    # 检查并切换到iframe(如果存在)
    try:
        iframe = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "iframe")))
        driver.switch_to.frame(iframe)
        print("Switched to iframe")
    except:
        print("No iframe found")

    # 定位目标元素并提取title值
    target_span = WebDriverWait(driver, 30).until(
        EC.visibility_of_element_located((By.XPATH, '//span[@class="right-Align"]'))
    )
    extracted_amount = target_span.get_attribute("title")
    print("Extracted amount:", extracted_amount)

finally:
    # 切回主文档(若切换过iframe)
    driver.switch_to.default_content()
    # 关闭浏览器
    driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:55:07