I am looking to scrape data from this site\'s mma data and parsing a few highcharts tables. I am clicking a link with selenium and then switching to the chart. I go to this s
When I use the CSS selector "g.highcharts-axis-labels tspan"
it returns all the fighter's names and when I use "g.highcharts-data-labels tspan"
it returns all the percents for line movement.
So you should be able to use something like
labels = driver.find_elements_by_css_selector("g.highcharts-axis-labels tspan")
data = driver.find_elements_by_css_selector("g.highcharts-data-labels tspan")
for i in range(0, len(labels) - 1)
print("Fighter: " + labels[i] + " (" + data[i] + ")")
An alternative is to use the command that Pawel Fus recommended,
Highcharts.charts[0].series[0].options.data
You should be able to execute that using JSE and it returns an array of arrays. You can then parse through that and get the data you want. It's up to you...
I could not figure out how to convert SVG data into what is displayed on the graph you mentioned, but wrote the following Selenium Python script:
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://www.bestfightodds.com/events/ufc-fight-night-108-swanson-vs-lobov-1258')
actions = webdriver.ActionChains(driver)
actions.move_to_element(driver.find_element_by_id('oID1013467091'))
actions.click()
actions.perform()
time.sleep(3)
driver.switch_to_active_element()
chart_number = driver.find_element_by_id('chart-area').get_attribute('data-highcharts-chart')
chart_data = driver.execute_script('return Highcharts.charts[' + chart_number + '].series[0].options.data')
for point in chart_data:
e = driver.execute_script('return oneDecToML('+ str(point.get('y')) + ')')
print(point.get('x'), e)
Here we are using Highcharts API and some js from the page sources, that converts server response for this chart to what we see on a graph.