Python/Selenium: Einstellungen-Button kann nicht gefunden oder angeklickt werden?
ich habe bei meinem Skript (Python/Selenium) ein kleines Problem. Und zwar habe ich vor, dass mein Selenium-Skript sich zuerst in gmx.at einloggt. Das funktioniert bei mir schon einwandfrei im Skript. Jedoch will ich, dass mein Selenium/Python-Skript in die Einstellungen navigiert. Nun findet das Skript nicht den Einstellungen-Button.
Das ist mein Skript:
print("Sidebar sichtbar. Versuche, den Einstellungen-Button zu finden.")
take_screenshot('sidebar_visible.png')
settings_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div/div[3]/div/div/div/button[1]")))
driver.execute_script("arguments[0].click();", settings_button)
take_screenshot('settings_opened.png')
print("Einstellungen-Button erfolgreich angeklickt.")
break
except (TimeoutException, NoSuchElementException) as e:
print(f"Das Einstellungen-Symbol konnte nicht gefunden werden. Fehler: {str(e)}. Versuche es erneut.")
take_screenshot('attempt_failed.png')
attempts -= 1
if attempts == 0:
print("Das Einstellungen-Symbol konnte immer noch nicht gefunden werden.")
Leider komme ich bei dem Einstellungen-Button seit mehreren Tagen nicht mehr und jegliche Unterstützung würde mir hierbei absolut weiterhelfen.
1 Antwort
Schau dir die Elementstruktur im Inspektor (Webentwicklungstools deines Browsers) noch einmal genau an. Wenn Selenium ein Element nicht findet, liegt es entweder nicht im angegebenen Pfad oder es existiert zu dem Zeitpunkt tatsächlich nicht.
Du solltest hierbei beachten, dass Selenium nur im aktuellen Dokument/Kontext sucht. Wenn das Element in einen Shadow DOM oder iFrame eingebunden ist, musst du erst den dazugehörigen Knoten finden und anschließend in dessen Kontext wechseln, um die Suche fortzuführen.
Beispiel 1: Das Element (needle) liegt in einem Shadow DOM
shadow_container = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "/path/to/shadow/container")))
shadow_root = driver.execute_script("return arguments[0].shadowRoot", shadow_container)
needle = shadow_root.find_element_by_xpath("...")
Beispiel 2: Das Element (needle) liegt in einem iFrame
iframe = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "/path/to/iframe/element")))
driver.switch_to.frame(iframe); # switch context
needle = driver.find_element_by_xpath("...")
leider nicht erfolgreich, oder ich habe die falschen xpaths gefunden, das problem ist einfach nur mir geht es hierbei auf gmx.at nachdem login in die einstellungen zu gehen, denn der einstellungen button kann einfach nicht gedrückt werden bzw nicht gefunden oder gedrückt