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

图表含空柱时driver.find_element失效及悬停提示获取问题求助

解决方案

1. 捕获异常,避免循环终止

空柱或无tooltip的元素会触发NoSuchElementException,用try-except块包裹tooltip提取逻辑,遇到异常时跳过当前元素,继续循环。

2. 加入显式等待,确保tooltip加载完成

直接调用find_element可能因tooltip加载不及时导致异常,用WebDriverWait等待tooltip可见,超时则判定为无tooltip。

3. 优化元素定位(可选)

  • 若空柱的rect元素有明显特征(如高度为0),可在XPath中直接过滤,提前排除无数据的柱形。
  • 区分柱形(rect)和折线点(circle)的定位,避免混在一起处理。

完整代码示例

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

# 初始化驱动(根据你的浏览器调整)
driver = webdriver.Chrome()
driver.get("目标页面URL")

# ---------------------- 处理柱形元素 ----------------------
# 可选:过滤掉高度为0的空柱
bars = driver.find_elements(By.XPATH, "//div[contains(@class,'commonGraphStyle__CommonGraphStyle')][3]//*[local-name()='svg']//*[name()='g' and @class='dxc-series']//*[name()='rect' and @height > 0]")

action = ActionChains(driver)
wait = WebDriverWait(driver, 2)  # 等待时长可根据页面加载速度调整

for bar in bars:
    try:
        # 悬停柱形
        action.move_to_element(bar).perform()
        # 等待tooltip出现并获取文本
        tooltip_element = wait.until(EC.visibility_of_element_located((By.XPATH, "//div[@class='dxc-tooltip']/div/div")))
        print(tooltip_element.text)
    except (NoSuchElementException, TimeoutException):
        print("当前柱形无tooltip信息")
        continue

# ---------------------- 处理折线圆点元素 ----------------------
# 单独定位粉色线的圆点(circle元素)
line_points = driver.find_elements(By.XPATH, "//div[contains(@class,'commonGraphStyle__CommonGraphStyle')][3]//*[local-name()='svg']//*[name()='g' and @class='dxc-series']//*[name()='circle']")

for point in line_points:
    try:
        action.move_to_element(point).perform()
        tooltip_element = wait.until(EC.visibility_of_element_located((By.XPATH, "//div[@class='dxc-tooltip']/div/div")))
        print(tooltip_element.text)
    except (NoSuchElementException, TimeoutException):
        print("当前折线点无tooltip信息")
        continue

driver.quit()

关键说明

  • WebDriverWait的等待时间可根据页面实际响应速度调整,避免过短导致误判或过长影响效率。
  • 若空柱的rect没有height属性,可检查其他特征(如fill颜色、opacity等)来过滤。
  • 确保ActionChains的perform()方法正确执行,部分页面可能需要多次移动鼠标触发tooltip。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:35:30