Не получается использовать словарь, который получен путём парсинга

С помощью Selenium Python получаю содержимое тега script, которое является словарем. Но при попытке получить его ключи получал ошибку что это строка. Пытаюсь преобразовать в словарь с помощью eval, но тоже получаю ошибку. Пробовал использовать eval, который из библиотеки, та же ошибка. Вот код:

script_raw = driver.find_element_by_id('__NEXT_DATA__').get_attribute('innerHTML')
print(script_raw)

script = eval(str(script_raw))
print(script)

Ошибка:

script = eval(str(script_raw))
File "<string>", line 1, in <module>
NameError: name 'null' is not defined

Первый принт выводит следующий текст:

{"props":{"pageProps":{"initialApolloState":{"ROOT_QUERY":{"__typename":"Query","sticker({\"input\":{\"id\":\"sticker-advent-katowice-2019\"}})":{"_id":"sticker-advent-katowice-2019","name":"Наклейка | advent | Katowice 2019","title":" advent | Katowice 2019"...

Не понимаю в чём ошибка. Буду благодарен за помощь!


Ответы (1 шт):

Автор решения: CrazyElf

Скорее всего у вас там где-то в недрах текста есть элемент вроде такого:

"some_elementh": null

Питон не понимает, что такое null и во что ему его преобразовывать когда он делает eval, это не питоновский объект. Есть два варианта решения:

  • Завести заранее переменную null = None, тогда eval возможно отработает, если не споткнётся на чём-то ещё
  • Работать с json как с json, а не через небезопасный eval - используйте библиотеку json и функцию json.loads(script_raw) для разбора json структуры в питоновские объекты
→ Ссылка