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

如何通过纯Python方法读取Highcharts调用setExtremes后的图表数据?

解决Highcharts调用setExtremes后获取过滤数据的Python方法

你的代码里有两个关键问题导致拿不到想要的数据:一是JavaScript代码的语法错误,二是误解了Highcharts数据存储的逻辑——options.data是图表的原始全量数据,调用setExtremes只是控制图表显示范围,不会修改原始数据,所以得换个方式取过滤后的显示数据。

我给你修正并优化后的代码,一步步来:

第一步:修正JavaScript执行逻辑

你之前把三个JS字符串直接拼接在一起,语法上就有问题,而且setExtremes是一个执行方法,不会返回数据,必须分开执行设置和获取操作。

第二步:获取正确的过滤后数据

Highcharts中,当前显示在图表上的点数据存在series[0].points数组里,而不是options.data。我们可以用JS的map方法把每个点的关键信息(比如x轴时间、y轴数值)提取出来,避免返回复杂的对象导致序列化问题。

完整代码如下:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time

capabilities = webdriver.DesiredCapabilities().FIREFOX
capabilities["marionette"] = True
driver = webdriver.Firefox(capabilities=capabilities, executable_path=gecko_binary_path)
driver.get(website)

# 用WebDriverWait替代time.sleep,更可靠地等待图表加载完成
WebDriverWait(driver, 10).until(
    lambda d: d.execute_script('return window.Highcharts.charts[0] !== undefined')
)

# 调用setExtremes设置时间范围(注意月份是从0开始的,1月对应0)
driver.execute_script("""
    const chart = window.Highcharts.charts[0];
    chart.xAxis[0].setExtremes(Date.UTC(2017, 0, 7), Date.UTC(2017, 0, 8));
""")

# 等待图表更新完成(可选,根据图表加载速度调整)
time.sleep(1)

# 获取过滤后的点数据,提取需要的字段
filtered_data = driver.execute_script("""
    const chart = window.Highcharts.charts[0];
    return chart.series[0].points.map(point => ({
        x: point.x,  // 时间戳(UTC)
        y: point.y,  // 对应数值
        category: point.category  // 如果是分类轴可以取这个,按需选择
    }));
""")

# 处理并打印数据
for item in filtered_data:
    print(item)

driver.quit()

关键说明:

  • WebDriverWait比time.sleep更灵活,会在图表加载完成后立即执行后续代码,不用固定等待5秒
  • series[0].points是当前图表渲染的实际数据,已经经过setExtremes的范围过滤
  • 用map转换数据格式,是因为直接返回Highcharts的Point对象可能会有序列化问题,提取需要的字段更稳妥

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:44:52