Python Selenium Cookie Button drücken?
Hallo Community :)
Ich schreibe zur Zeit ein Script, welches bestimmte Aktionen auf einer Webseite automatisiert aufruft. Nur leider muss ich beim Seitenaufruf von Thalia.de Cookies akzeptieren. Ich habe also mit den Entwickler Werkzeugen des Browser nach dem Klassennamen gesucht und versucht, den Button "Alles akzeptieren", damit zu drücken. Nur leider funktioniert das nicht - er findet das Element nicht. Dazu sei gesagt, dass es sich dabei um ein Popup handelt, welches durch das usercentrics Script aufgerufen wird... hat das darauf irgendwie einfluss?
Es wäre nett, wenn da vielleicht mal jemand drüber schaut, warum es nicht funktioniert und was ich stattdessen ändern müsste...
Danke schon mal im Voraus :)
Probiert habe ich es mit folgendem Code:
accept_cookies_button = browser.find_element(By.LINK_TEXT,'Alles akzeptieren')
accept_cookies_button = browser.find_element(By.XPATH,'/html/body/div//div/div/div[2]/div/div[2]/div/div[2]/div/div[1]/div/button[2]')
accept_cookies_button = browser.find_element(By.CSS_SELECTOR,".sc-dcJsrY.jrCGbv")
accept_cookies_button = browser.find_element(By.CLASS_NAME,"sc-dcJsrY.jrCGbv")
accept_cookies_button = browser.find_element(By.CSS_SELECTOR,"button.sc-dcJsrY.jrCGbv")
accept_cookies_button = browser.find_element(By.CLASS_NAME, "jrCGbv")
Nach wie vor funktioniert kein Eintrag davon. Selbstverständlich löse ich danach noch ein .click() aus, jedoch schließt sich an dieser Stelle der Browser und Python bringt den Fehler, dass er das Element nicht finden würde...
Hat da noch jemand Ideen? :)
1 Antwort
![](https://images.gutefrage.net/media/user/regex9/1455660989427_nmmslarge__0_13_270_270_615d5a3bc6888f4c1486ce2b4d9d8f60.png?v=1455660989000)
Das Problem ist, dass sich das Element innerhalb eines Shadow Roots befindet. Das heißt, du müsstest erst einmal den Host für diesen Knoten finden, um anschließend den Shadow-Tree auflösen zu können.
shadow_host = browser.find_element(By.CSS_SELECTOR, "#usercentrics-root")
shadow_root = driver.execute_script("return arguments[0].shadowRoot", shadow_host)
accept_cookies_button = shadow_root.find_element(By.CSS_SELECTOR, ".sc-dcJsrY.jrCGbv")
PS.: Beachte bezüglich By.CLASS_NAME, dass sc-dcJsrY und jrCGbv zwei unterschiedliche Klassen sind.