Ошибка при очистке Highcharts в Python с помощью селена - PullRequest
1 голос
/ 10 июля 2020

Я пытаюсь очистить диаграммы с двух разных веб-сайтов, я натолкнулся на этот ответ execute_script в этом вопросе stackoverflow: Как очистить диаграммы с веб-сайта с помощью python?

Это помог мне очистить первый веб-сайт, но когда я использую его на втором веб-сайте, он возвращает следующую ошибку:

line 27, in <module>
    temp = driver.execute_script('return window.Highcharts.charts[0]'

selenium.common.exceptions.JavascriptException: Message: javascript error: Cannot read 
property '0' of undefined

Веб-сайт: http://lumierecapital.com/#

Вы должны нажать кнопку производительности слева, чтобы получить диаграмму высоких значений.

Цель: я просто хочу очистить от него значения даты и NAV на единицу

Как и на предыдущем веб-сайте, этот код должен был распечатать dict с X и Y в качестве ключей и датой и данными в качестве значений, но для этого он не работает.

Вот python код:

from bs4 import BeautifulSoup
import requests
from selenium.webdriver.chrome.options import Options
from shutil import which
from selenium import webdriver
import time

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_path = which("chromedriver")
driver = webdriver.Chrome(executable_path=chrome_path, options=chrome_options)
driver.set_window_size(1366, 768)

driver.get("http://lumierecapital.com/#")

performance_button = driver.find_element_by_xpath("//a[@page='performance']")

performance_button.click()

time.sleep(7)

temp = driver.execute_script('return window.Highcharts.charts[0]'
                            '.series[0].options.data')

for item in temp:
    print(item)


1 Ответ

0 голосов
/ 10 июля 2020

Вы можете использовать модуль re для извлечения значений диаграммы производительности:

import re
import requests


url = 'http://lumierecapital.com/content_performance.html'
html_data = requests.get(url).text

for year, month, day, value, datex in re.findall(r"{ x:Date\.UTC\((\d+), (\d+), (\d+)\), y:([\d.]+), datex: '(.*?)' }", html_data):
    print('{:<10} {}'.format(datex, value))

Выводит:

30/9/07    576.092
31/10/07   577.737
30/11/07   567.998
31/12/07   556.670
31/1/08    460.886
29/2/08    496.740
31/3/08    484.016
30/4/08    523.829
31/5/08    546.661
30/6/08    494.067
31/7/08    475.942
31/8/08    389.147
30/9/08    299.661
31/10/08   183.690
30/11/08   190.054
31/12/08   211.960
31/1/09    193.308

... and so on.
...