我想测试使用Python和Selenium Webdriver从JSON文件(我已经阅读过)中显示数据的Highcharts图表的准确性。
如何从网站上阅读Highchart数据?
谢谢你, 叶夫答案 0 :(得分:2)
高清数据转换为SVG路径,因此您必须自己解释路径。我不确定你为什么要这样做,实际上:一般来说,你可以信任第三方图书馆像宣传的那样工作;该代码的测试应该驻留在该库中。
如果您仍想这样做,那么您必须深入了解Javascript以检索数据。以Highcharts Demo为例,您可以提取第一行的数据点,如下所示。这将为您提供SVG path definition作为字符串,然后您可以解析该字符串以确定原点和数据点。将其与垂直轴的大小进行比较应该可以计算图表所隐含的值。
# Get the origin and datapoints of the first line
s = selenium.get_eval("window.jQuery('svg g.highcharts-tracker path:eq(0)')")
splitted = re.split('\s+L\s+', s)
origin = splitted[0].split(' ')[1:]
data = [p.split(' ') for p in splitted[1:]]
# Convert to floats
origin = [float(origin[1]), float(origin[2])]
data = [[float(x), float(y)] for x, y in data]
# Get the min and max y-axis value and position
min_y_val = float(selenium.get_eval( \
"window.jQuery('svg g.highcharts-axis:eq(1) text:first').text()")
max_y_val = float(selenium.get_eval( \
"window.jQuery('svg g.highcharts-axis:eq(1) text:last').text()")
min_y_pos = float(selenium.get_eval( \
"window.jQuery('svg g.highcharts-axis:eq(1) text:first').attr('y')")
max_y_pos = float(selenium.get_eval( \
"window.jQuery('svg g.highcharts-axis:eq(1) text:last').attr('y')")
# Calculate the value based on the retrieved positions
y_scale = min_y_pos - max_y_pos
y_range = max_y_val - min_y_val
y_percentage = data[0][1] * 100.0 / y_scale
value = max_y_val - (y_range * percentage)
免责声明:我没有时间对其进行全面验证,但这些内容可以为您提供所需的内容。