图表含空柱时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
相关产品推荐
相关产品推荐

