Python:在 setExtreme 之后从 Highcharts 读取数据

Posted

技术标签:

【中文标题】Python:在 setExtreme 之后从 Highcharts 读取数据【英文标题】:Python: Read data from Highcharts after setExtreme 【发布时间】:2018-06-29 21:15:41 【问题描述】:

我正在尝试使用 Selenium 从 Highcharts 图表中获取数据。我的问题是setExtremes 函数不适用于.options.data。使用setExtremes 后,如何使用纯基于 Python 的方法读取数据?

我的代码:

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

temp = driver.execute_script('return window.Highcharts.charts[0].series[0]'
                             '.xAxis[0].setExtremes(Date.UTC(2017, 0, 7), Date.UTC(2017, 0, 8))'
                             '.options.data'
                            )

data = [item for item in temp]
print(data)

【问题讨论】:

这个 JS 是否可以在使用开发控制台的浏览器中工作? 相关html请。 @JeffC 不,它没有。 t 可能是操作顺序已关闭,即在系列期间必须调用setExtremes,但我已经用尽了所有努力。 您可以在单个执行脚本中将两条带分号的语句组合在一起,如下所示 temp = driver.execute_script(' window.Highcharts.charts[0].xAxis[0].setExtremes(Date.UTC(20‌) ​17, 0, 7),Date.UTC(2017, 0, 8));return 返回 window.Highcharts.charts[0].series[0].options.data') 这取决于如何处理bound的变化。如果数据已经被缓存,那么使用@Murthi 建议的两个语句。如果没有,图表可能必须请求服务器获取数据,这意味着您必须等待使用execute_sync_script 刷新数据。注意可以通过Highcharts.charts[0].userOptions.series[0].data获取缓存数据。 【参考方案1】:

问题是setExtremes(min, max) 方法返回undefined,所以你不能链接选项。解决方法是包装这个方法并传递上下文,例如:

(function(H) 
  H.wrap(H.Axis.prototype, 'setExtremes', function (proceed) 
    proceed.apply(this, Array.prototype.slice.call(arguments, 1);
    return this; // <-- context for chaining
  );
)(Highcharts);

现在我们可以使用:

return window.Highcharts.charts[0].xAxis[0].setExtremes(min, max).series[0].options.data;

注意:sn-p 可以放在单独的文件中,并像任何其他 Highcharts 插件一样使用(只需在 Highcharts 库之后加载)。

重要

Axis 对象仅引用绑定到此轴的系列。如果您想访问图表上的任何系列,请使用:

return window.Highcharts.charts[0].xAxis[0].setExtremes(min, max).chart.series[0].options.data;

【讨论】:

我将从 Python 中调用它。有没有办法通过 Python 执行此操作 这就是库的工作方式,因此除非您使用不同的方法,否则您无法在 Python 中解决此问题。 setExtremes() 返回undefined 所以你不能链接属性。换句话说,你有两个解决方案:拆分脚本执行或添加插件。只是在同一页面上:我的 sn-p 可以放在一个文件中并像任何其他 Highcharts 插件一样加载。【参考方案2】:

我正在尝试在 Highcharts 上执行您的代码 demo page 问题在于xAxis[0]xAxis 不是数组而是字典,因此您必须在 [] 中提供一个字符串值。

在the docs 中检查xAxis 我猜你在找xAxis.events.setExtremes

编辑

我现在看到 xAxis 可以是一个数组,但您很可能缺少那些 events,所以我的解决方案应该更改为 xAxis[0].events.setExtremes

【讨论】:

以上是关于Python:在 setExtreme 之后从 Highcharts 读取数据的主要内容,如果未能解决你的问题,请参考以下文章

在Python中的特定字符之后删除部分字符串

从 Python Social Auth 获取访问令牌

[python小记]使用lxml修改xml文件,并遍历目录

如何从ruby脚本中安装rubygem并在之后需要这个gem?

在每个第 n 个元素之后插入 Python 列表中的元素

Python 从字符设备读取空字节数组