Python Selenium: Sicherstellen, dass mehrere Elemente geladen werden
Beim Umgang mit dynamisch geladenen Elementen über AJAX kann es schwierig sein, deren Aussehen zu bestätigen. Um dieses Szenario zu bewältigen, werden wir WebDriverWait von Selenium und seine verschiedenen Strategien nutzen, um das Vorhandensein mehrerer Elemente sicherzustellen.
Sichtbarkeit aller Elemente:
Um die Sichtbarkeit von zu überprüfen Wenn alle Elemente mit einem bestimmten Selektor übereinstimmen, können wir die Bedingung „visibility_of_all_elements_located()“ verwenden:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
elements = WebDriverWait(driver, 20).until(
EC.visibility_of_all_elements_located(
(By.CSS_SELECTOR, "ul.ltr li[id^='t_b_'] > a[id^='t_a_'][href]")
)
)
Warten auf eine bestimmte Anzahl von Elementen:
Wenn Sie warten müssen, bis eine bestimmte Anzahl von Elementen geladen ist, können Sie eine Lambda-Funktion mit den ExpectedConditions verwenden class:
WebDriverWait(driver, 20).until(
lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength)
)
XPath für untergeordnete Elemente:
Um auf untergeordnete Elemente innerhalb eines übergeordneten Elements zu warten, können Sie XPath-Ausdrücke verwenden, anstatt das gesamte DOM zu durchsuchen:
WebDriverWait(driver, 20).until(
EC.presence_of_element_located(
(By.XPATH, "//ul[@class='ltr']//li[starts-with(@id, 't_b_')]/a[starts-with(@id, 't_a_')]")
)
)
Benutzerdefinierte Wartebedingungen:
Wenn Sie lieber Ihre eigene Wartebedingung erstellen möchten, können Sie eine Unterklasse von webdriver.support.ui.ExpectedCondition definieren:
class MoreThanOne(webdriver.support.ui.ExpectedCondition):
def __init__(self, selector):
self.selector = selector
def __call__(self, driver):
elements = driver.find_elements_by_css_selector(self.selector)
return len(elements) > 1
WebDriverWait(driver, 30).until(MoreThanOne('li'))
Verhinderung von Elementverlust in DOM:
Um zu vermeiden, dass das aktuelle Element nach einem Suchvorgang verloren geht, speichern Sie es in einer Variablen, bevor Sie den Wartevorgang ausführen:
element = driver.find_element_by_css_selector('ul')
WebDriverWait(element, 30).until(MoreThanOne('li'))
Fazit:
Diese Techniken bieten eine flexible und robuste Möglichkeit, auf das Laden von zu warten mehrere Elemente in Selen. Wählen Sie je nach Ihren Anforderungen den Ansatz, der am besten zu Ihrem Anwendungsfall passt.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3