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

时间:2018-01-20 21:27:45

标签: javascript python html selenium highcharts

我正在尝试使用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)

2 个答案:

答案 0 :(得分:1)

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

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

编辑

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

答案 1 :(得分:-2)

问题是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;

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

重要

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

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