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

Web Scraping:如何使用Selenium抓取网页图表中动态悬浮提示信息

Selenium抓取图表悬浮tooltip动态数据实现方案
  • 第一步:定位所有柱状图元素
    调用Selenium的元素查找方法,定位到图表中所有需要触发悬浮提示的柱状条DOM元素,统一存入列表备用。可搭配显式等待WebDriverWait使用,避免元素未完全加载导致的查找报错。
  • 第二步:实现鼠标悬停交互
    导入Selenium的ActionChains交互类,遍历第一步拿到的所有柱状条元素,逐个执行鼠标悬停操作,悬停后设置100-300毫秒的等待时间,保证悬浮提示框完全渲染。
  • 第三步:定位提取动态数值
    提前确认悬浮提示框的固定元素定位规则(这类组件的class属性通常为固定通用命名,比如highcharts-tooltip、ant-tooltip等),悬停完成后直接查找该元素提取text属性,即可拿到当前对应的动态数值。

常见问题规避:

  1. 如果柱状条不在当前可视区域,需要先调用scroll_into_view()方法将元素滚动到屏幕可见位置,再执行悬停操作
  2. 部分图表的tooltip会挂载在全局body节点下而非图表父节点下,定位时不要限制父节点范围
  3. 如果tooltip有延迟加载逻辑,可搭配显式等待等待tooltip元素的visible属性为true后再提取内容
  4. 若图表为canvas渲染,不存在单独的柱状条DOM元素,可计算每个柱状条对应的横向偏移量,使用ActionChains(driver).move_to_element_with_offset(canvas元素, 偏移X, 偏移Y).perform()的方式逐个触发悬浮提示

参考实现代码(Python)

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

driver = webdriver.Chrome()
driver.get("目标页面地址")

# 等待图表加载完成
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, "替换为实际柱状条class名"))
)
# 获取所有柱状条元素
bars = driver.find_elements(By.CLASS_NAME, "替换为实际柱状条class名")
# 配置tooltip定位器
tooltip_locator = (By.CLASS_NAME, "替换为实际tooltip class名")

result = []
for bar in bars:
    # 滚动到元素可见区域
    driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", bar)
    # 执行鼠标悬停
    ActionChains(driver).move_to_element(bar).perform()
    # 等待tooltip渲染完成
    tooltip = WebDriverWait(driver, 3).until(EC.visibility_of_element_located(tooltip_locator))
    # 提取内容存入结果列表
    result.append(tooltip.text)

print(result)
driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:54:05