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:
<code class="python">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]") ) )</code>
Warten auf eine bestimmte Anzahl von Elementen:
Wenn Sie warten müssen Damit eine bestimmte Anzahl von Elementen geladen werden soll, können Sie eine Lambda-Funktion mit der ExpectedConditions-Klasse verwenden:
<code class="python">WebDriverWait(driver, 20).until( lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength) )</code>
XPath für untergeordnete Elemente:
Um auf das Kind zu warten Elemente innerhalb eines übergeordneten Elements, anstatt das gesamte DOM zu durchsuchen, können Sie XPath-Ausdrücke verwenden:
<code class="python">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_')]") ) )</code>
Benutzerdefinierte Wartebedingungen:
Wenn Sie lieber eigene Wartebedingungen erstellen möchten Wartebedingung: Sie können eine Unterklasse von webdriver.support.ui.ExpectedCondition definieren:
<code class="python">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</code>
<code class="python">WebDriverWait(driver, 30).until(MoreThanOne('li'))</code>
Verhinderung von Elementverlust im DOM:
Zu vermeiden Wenn das aktuelle Element nach einem Suchvorgang verloren geht, speichern Sie es in einer Variablen, bevor Sie den Wartevorgang ausführen:
<code class="python">element = driver.find_element_by_css_selector('ul') WebDriverWait(element, 30).until(MoreThanOne('li'))</code>
Schlussfolgerung:
Diese Techniken bieten eine flexible und robuste Möglichkeit auf das Laden mehrerer Elemente in Selenium warten. Wählen Sie je nach Ihren Anforderungen den Ansatz, der am besten zu Ihrem Anwendungsfall passt.
Das obige ist der detaillierte Inhalt vonWie kann sichergestellt werden, dass mehrere Elemente in Python Selenium geladen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!