求助:使用Python及Selenium提取指定网页Tooltip文本
提取OpenNEM网站Tooltip文本的解决方案
方法一:Selenium模拟鼠标悬浮获取
网站的Tooltip通常是鼠标悬浮后才显示的动态元素,直接定位触发元素无法获取内容,需要模拟悬浮操作:
- 初始化浏览器并加载目标页面,等待页面元素加载完成
- 定位到触发Tooltip的目标元素(比如图表上的数据点)
- 用动作链模拟鼠标悬浮在目标元素上
- 等待Tooltip元素可见后,提取其文本内容
示例代码:
from selenium import webdriver 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.webdriver.common.by import By # 初始化Chrome浏览器 driver = webdriver.Chrome() driver.get("https://opennem.org.au/facility/au/NEM/CLOVER/?range=3d&interval=30m") # 等待触发Tooltip的元素加载(需根据页面实际调整选择器,这里以图表数据点为例) target_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "circle.point")) ) # 模拟鼠标悬浮 ActionChains(driver).move_to_element(target_element).perform() # 等待Tooltip显示并获取文本 tooltip_element = WebDriverWait(driver, 5).until( EC.visibility_of_element_located((By.CSS_SELECTOR, "div.tooltip-inner")) ) print(tooltip_element.text) driver.quit()
方法二:直接提取前端JS数据
很多图表类网站的Tooltip数据会存储在前端JavaScript变量中,可以直接执行JS脚本获取:
- 打开浏览器开发者工具,在Console面板查看页面的全局变量(比如
chart、series等) - 找到存储Tooltip数据的变量,用Selenium执行JS脚本提取
示例代码:
from selenium import webdriver driver = webdriver.Chrome() driver.get("https://opennem.org.au/facility/au/NEM/CLOVER/?range=3d&interval=30m") # 等待页面JS加载完成 driver.implicitly_wait(10) # 执行JS获取图表数据(需根据页面实际变量调整) tooltip_data = driver.execute_script("return window.series[0].data;") # 遍历提取所需的Tooltip文本 for item in tooltip_data: print(item['tooltip']) # 具体字段需根据实际数据结构调整 driver.quit()
注意事项
- 若选择器不生效,需打开页面开发者工具,手动定位触发元素和Tooltip元素的CSS选择器或XPath
- 网站可能存在反爬机制,建议添加合理的等待时间,避免频繁操作
- 使用无头浏览器时,需设置窗口大小,确保元素处于可见区域
内容的提问来源于stack exchange,提问作者GLADOS
相关产品推荐
相关产品推荐

