So warten Sie mit Selenium in Python auf das Laden mehrerer Elemente
Bei der Arbeit mit dynamischen Webelementen, die asynchron über AJAX geladen werden, wird dies der Fall Stellen Sie unbedingt sicher, dass die Elemente vollständig geladen sind, bevor Sie irgendwelche Aktionen an ihnen durchführen. Dieser Artikel stellt mehrere Methoden zum Warten auf das Laden mehrerer Elemente mit Selenium in Python bereit.
Verwenden von WebDriverWait mit benutzerdefinierter Bedingung
Ein Ansatz besteht darin, eine benutzerdefinierte Wartebedingung mithilfe von zu erstellen WebDriverWait-Klasse. In dieser Bedingung prüfen Sie, ob die Anzahl der Elemente, die einem bestimmten Selektor entsprechen, einen angegebenen Schwellenwert überschreitet. Zum Beispiel:
<code class="python">from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By def wait_for_multiple_elements(driver, selector, min_count): """ Wait for a minimum number of elements to load. Args: driver (WebDriver): Selenium WebDriver instance. selector (str): CSS selector for the elements. min_count (int): Minimum number of elements to wait for. """ def custom_condition(d): elements = d.find_elements(By.CSS_SELECTOR, selector) return len(elements) >= min_count return WebDriverWait(driver, 30).until(custom_condition)</code>
Verwenden von WebDriverWait mit Visibility_of_All_Elements_Located
Dieser Ansatz verwendet die integrierte erwartete Bedingung „visibility_of_all_elements_located()“, um zu warten, bis alle Elemente mit einem angegebenen Locator übereinstimmen sichtbar. Zum Beispiel:
<code class="python">from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By 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>
Lambda-Funktion verwenden
Wenn Sie warten müssen, bis eine bestimmte Anzahl von Elementen geladen ist, können Sie eine Lambda-Funktion mit WebDriverWait verwenden. Um beispielsweise auf 10 Elemente zu warten:
<code class="python">WebDriverWait(driver, 20).until( lambda driver: len(driver.find_elements_by_xpath("//ul[@class='ltr']//li[starts-with(@id, 't_b_')]/a[starts-with(@id, 't_a_') and starts-with(., 'Category')]")) == 10 )</code>
Warten auf untergeordnete Elemente
Um auf untergeordnete Elemente eines bestimmten übergeordneten Elements zu warten, können Sie .find_element_by_... Methode auf das übergeordnete Element anwenden und dann die oben genannten Wartetechniken auf das untergeordnete Element anwenden.
Referenzen
Das obige ist der detaillierte Inhalt vonWie kann ich mit Selenium in Python darauf warten, dass mehrere Elemente geladen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!