Python Selenium findet Button nicht?
Hi, ich habe ein Script geschrieben welches nacheinander auf verschiedene Buttons klickt und sich einloggt. Beim letzen Button kommt allerdings immer die Fehlermeldung, dieser sei nicht gefunden worden. Habe es sowohl mit Link_Text als auch mit ID versucht.
from selenium import webdriver
from selenium.webdriver.common.by import By
import selenium.webdriver.common
import selenium.webdriver.common.actions
from selenium.webdriver.support import expected_conditions as EC
from pynput.keyboard import Key, Controller
import time
from selenium.webdriver.support.wait import WebDriverWait
import win32clipboard
keyboard = Controller()
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://04101643.moodle.belwue.de/moodle/blocks/exa2fa/login/")
driver.maximize_window()
username = driver.find_element_by_id("username")
password = driver.find_element_by_id("password")
username.send_keys("---") #Name und Passwort hab ich natürlich nur zum hochladen hier entfernt ;)
password.send_keys("---")
login = driver.find_element_by_id("loginbtn")
login.click()
time.sleep(5)
fach = driver.find_element_by_partial_link_text("Mathematik")
fach.click()
time.sleep(3)
bbb = driver.find_element_by_xpath('//img[contains(@src,"https://04101643.moodle.belwue.de/moodle/theme/image.php/boost/bigbluebuttonbn/1609841251/icon")]')
bbb.click()
time.sleep(3)
teilnehmen = driver.find_element_by_id("join_button_input")
teilnehmen.click()
time.sleep(5)
keyboard.press(Key.ctrl)
keyboard.press('l')
time.sleep(1)
keyboard.release(Key.ctrl)
keyboard.release('l')
time.sleep(1)
keyboard.press(Key.ctrl)
keyboard.press('c')
time.sleep(1)
keyboard.release(Key.ctrl)
keyboard.release('c')
win32clipboard.OpenClipboard()
page = win32clipboard.GetClipboardData() #Muss man hier das Fenster wechseln?
win32clipboard.CloseClipboard() #Hinweis beim Klicken auf den vorherigen Button wird der Link in einem neuen Tab geöffnet
driver.get(page) #Hier geht es dann zu BigBlueButton (Videochat Seite) auf der der letzte Button gedrückt werden soll
time.sleep(1)
keyboard.press(Key.ctrl)
keyboard.press('w')
time.sleep(1)
keyboard.release(Key.ctrl)
keyboard.release('w')
time.sleep(3)
mode = driver.find_element_by_partial_link_text("Nur") #Den hier findet es nicht (falls es jemand kennt: Ist der ,,Nur zuhören" Button von BigBlueButton, habe den Code leider nicht da
mode.click()
Für Hinweise oder Lösungen des Problems wäre ich sehr dankbar. Falls es Unklarheiten gibt, gerne einen Kommentar schreiben.
1 Antwort
Analysiere den Button noch einmal.
- Befindet sich das Element auf derselben Seite oder liegt es in einem iFrame?
- Reicht die Wartezeit von drei Sekunden aus (obwohl ich davon ausgehe)?
- Handelt es sich tatsächlich um ein Link-Element? Ist der Selektor eindeutig?
- Wird das Element wirklich nicht gefunden oder wird es gefunden, kann aber nicht angeklickt werden (bzw. zeigt keine Reaktion auf einen Klick)?
Wenn ich das Namensfeld ausfülle und auf Join klicke, bekomme ich ein Loading-Gif angezeigt, aber soweit passiert erst einmal nichts (ich habe es jetzt zwei- bis dreimal versucht und jeweils 10-15 Sekunden gewartet; ein Owner mit den Initialien MW wird mir angezeigt). Ich könnte mir vorstellen, dass dein Skript gerade an derselben Stelle scheitert. Bist du denn derzeit auf der Seite explizit angemeldet?
Hab es hinbekommen aber lag an was anderem...
Dann schreib doch noch deine konkrete Lösung hier hinein. Wer weiß, ob es jemanden anders noch einmal weiterhelfen kann.
ich bin dir dankbar, das du das erwähnt hast, denn nähmlich brauche ich es gerade, vielen dank.
Ich hab jetzt mal so einen Raum erstellt und überprüft. Soweit passt das alles. Vielleicht könntest du aber auch nochmal schauen. Hier wäre der Link dazu: https://demo.bigbluebutton.org/gl/mar-0aj-sfo-pht Der Button kommt, nachdem man auf teilnehmen geklickt hat. (der Rechte mit den Kopfhörern)