简体   繁体   中英

Python: Read data from Highcharts after setExtreme

I'm trying to get the data from a Highcharts chart using Selenium. My issue is that the setExtremes function does not work with .options.data . How can I read data after using setExtremes using purely Python-based methods?

My code:

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)

I am trying to execute your code on Highcharts demo page
The problem is with xAxis[0] , xAxis is not an array but a dictionary, so you must supply a string value there inside those [] .

check xAxis in the docs
I am guessing you're looking for xAxis.events.setExtremes

Edit

I see now that xAxis can be an array, but you're most likely missing those events so my solution should be changed to xAxis[0].events.setExtremes

The problem is setExtremes(min, max) method returns undefined , so you can not chain options. Solution is to wrap this method and pass on context, for example:

(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);

Now we can use:

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

Note: The snippet can be placed in a separate file and used like any other Highcharts plugin (simply load after Highcharts library).

Important

Axis object has references only to series that are bound to this axis. If you want to access any series on the chart use:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM