0. Überblick
Wenn Sie die Browserinteraktion mit Selenium automatisieren, stehen Sie häufig vor Szenarien, in denen Sie auf die Verfügbarkeit von Elementen warten müssen oder bis bestimmte Bedingungen erfüllt sind.
Die Warteoptionen in Selenium sind 'Time.sleep()' 'Implicit Wait' 'Explicitly Wait'.
Aber welche sollte man verwenden?
Wir werden die Unterschiede der drei Optionen im Detail anhand ihrer Vor- und Nachteile vergleichen.
1. Time.sleep()
Dies ist die grundlegende Methode in Python, um feste Verzögerungen im Skript einzuführen. Wenn time.sleep(Sekunden) aufgerufen wird, wird die Ausführung des gesamten Skripts für die angegebene Zeit in Sekunden angehalten.
1.1. Vorteile von Time.sleep()
Einfach zu verwenden und erfordert keine Konfiguration.
Sie können genau wissen, wie lange das Skript wartet.
1.2. Nachteile von Time.sleep()
In den meisten Fällen ist die feste Verzögerung länger als nötig, was zu längeren Testlaufzeiten führt.
Wenn die wartende Aufgabe innerhalb einer längeren Zeit als der Schlafzeit abgeschlossen wird, kann der Test fehlschlagen.
2. Implicit Wait
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10) # WebDriver will wait for up to 10 seconds for an element to appear
driver.get('<https://example.com>')
element = driver.find_element_by_id('some-id')
요소가 웹 페이지에 나타나지 않는 경우 "해당 요소 예외 없음"을 발생시키기 전에 지정된 시간 동안 기다리도록 Selenium WebDriver에 지시합니다.
2.1. Vorteile von Implicit Wait:
Der WebDriver wartet nicht die gesamte Zeit, wenn das Element früher verfügbar wird.
Es ist schneller als die Verwendung von time.sleep().
Es gilt für die gesamte WebDriver-Sitzung.
2.2. Nachteile von Implicit Wait
Da man nicht sicher sein kann, wie lange der WebDriver tatsächlich gewartet hat, kann das Debuggen erschwert werden.
Wenn Implicit Wait und Explicitly Wait kombiniert werden, können unvorhersehbare Wartezeiten auftreten.
3. Explicitly Wait
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('<https://example.com>')
# Waiting for up to 10 seconds until an element with the specified ID becomes visible
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, 'some-id'))
)
3.1. Vorteile von Explicitly Wait
Sie können nicht nur die Verfügbarkeit von Elementen, sondern auch verschiedene Bedingungen festlegen. Zum Beispiel können Sie warten, bis ein Element klickbar ist, angezeigt wird oder bestimmter Text erscheint.
Da es keine Einstellung für die gesamte WebDriver-Sitzung ist, können Sie verschiedene Wartezeiten für verschiedene Elemente je nach Verhalten und Anforderungen definieren.
Es verlängert die Testdauer nicht unnötig. Das Skript wird fortgesetzt, sobald die Bedingung erfüllt ist.
Es bietet bessere Fehlermeldungen, um besser zu verstehen, was falsch gelaufen ist, wenn der Test fehlschlägt.
3.2. Nachteile von Explicitly Wait
Im Gegensatz zum Implicit Wait müssen Sie die Wartebedingungen jedes Mal festlegen, wenn sie benötigt werden.
Es ist nur geeignet für die Verarbeitung von Web-Elementen, die mit AJAX oder verschiedenen Zeitintervallen geladen werden.
4. Fazit: Wählen Sie die passende Warteoption je nach Situation.
Implicit Wait ist ähnlich wie ein großes Netz, das sicherstellt, dass alle Elemente innerhalb des festgelegten Zeitraums verfügbar sind, während Explicitly Wait ähnlich wie eine Angelrute ist, die auf bestimmte Elemente unter bestimmten Bedingungen abzielt.
Es wird empfohlen, Implicit Wait und Explicitly Wait nicht zu mischen. Wenn sie willkürlich gemischt werden, steigt die Wahrscheinlichkeit unvorhersehbarer Verhaltensweisen.
In komplexen Webanwendungen wird häufig Explicitly Wait bevorzugt, da es eine detailliertere Steuerung ermöglicht.
Bitte nutzen Sie diese Informationen sinnvoll und effektiv.
Lesen Sie auch:
Daten sammeln, jetzt automatisieren
Starten Sie in 5 Minuten ohne Codierung · Erfahrung mit dem Crawlen von über 5.000 Websites




