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

如何用Selenium和Python提取SVG标签内g元素中的文本?

解决MSCI ESG气候工具中SVG内g标签文本提取问题

问题场景

在MSCI的ESG气候搜索工具页面完成公司搜索、展开最后一个下拉菜单后,需要提取指定SVG标签下g标签内的文本字段,但原代码未成功提取。

修正方案

1. 处理动态加载问题

页面中的Highcharts图表是动态渲染的,直接查找元素会因为元素未加载完成导致失败,必须使用显式等待确保元素已存在。

2. 优化定位逻辑

原XPATH定位可简化,同时确保遍历所有目标text元素(如果存在多个),避免只取第一个元素的文本。

修正后的代码示例

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

# 等待目标SVG元素加载完成,超时时间10秒
wait = WebDriverWait(driver, 10)
target_svg = wait.until(
    EC.presence_of_element_located(
        (By.XPATH, "//svg[@class='highcharts-root']")
    )
)

# 定位g标签下的所有text元素
text_items = target_svg.find_elements(
    By.XPATH, 
    ".//g[@class='highcharts-axis-labels highcharts-xaxis-labels']//text"
)

# 提取并打印所有文本
for item in text_items:
    print(item.text)

额外注意事项

  • 确认g标签的class属性完全匹配:页面可能存在多个同类型的g标签,若提取结果不符合预期,可结合父元素或其他属性缩小定位范围
  • 若仍存在命名空间问题,可将XPATH中的标签名替换为命名空间写法,比如:
    //*[local-name()='svg' and @class='highcharts-root']//*[local-name()='g' and @class='highcharts-axis-labels highcharts-xaxis-labels']//*[local-name()='text']
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:01:10