from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--window-size=1920,1040")
service = Service(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=chrome_options)
wait = WebDriverWait(driver, 15, poll_frequency=1)
driver.get("https://eaist.mos.ru/login.html?redirect=https://eaist.mos.ru/panel.html")
# Кнопка: "Войти в систему"
LOGIN = ("xpath", "/html/body/div[1]/div/button")
# Нажимаю на кнопку "Войти в систему"
wait.until(EC.element_to_be_clickable(LOGIN)).click()
def get_shadow_root(element):
return driver.execute_script('return arguments[0].shadowRoot', element)
# Получаю дерево 1-го хоста
shadow_host_1 = driver.find_element(
"css selector",
'[version="1"]'
)
# Получаю дерево 2-го хоста, который внутри 1-го
shadow_host_2 = get_shadow_root(shadow_host_1).find_element(
'css selector',
'[data-test-id="Модальное окно согласия на обработку ПД"]'
)
# Получаю дерево 3-го хоста, который внутри 2-го
shadow_host_3 = shadow_host_2.find_element(
'css selector',
'[data-test-id="Понятно"]'
)
# Нахожу кнопку внутри дерева 3-го хоста
button = get_shadow_root(shadow_host_3).find_element(
'css selector',
'[class="container"]'
)
# Дожидаюсь кликабельности кнопки и нажимаю на нее
wait.until(EC.element_to_be_clickable(button)).click()
sleep(10)
driver.close()
# Получаю вот такую ошибку:
# selenium.common.exceptions.ElementClickInterceptedException:
# Message: element click intercepted: Element <button class="container" type="positive" size="large">...</button> is not clickable
# at point (1153, 448). Other element would receive the click: <span>...</span>
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.JavascriptException: Message: javascript error: Cannot read properties of null (reading 'querySelector')