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 读取数据的主要内容,如果未能解决你的问题,请参考以下文章