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