Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich mit Selenium in Python darauf warten, dass mehrere Elemente geladen werden?

Wie kann ich mit Selenium in Python darauf warten, dass mehrere Elemente geladen werden?

Barbara Streisand
Freigeben: 2024-11-02 22:45:30
Original
954 Leute haben es durchsucht

How to Wait for Multiple Elements to Load Using Selenium in Python?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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

    [ Selenium Python-Dokumentation](https://selenium-python.readthedocs.io/waits.html)
  • [So warten Sie mit Selenium und Python auf das Laden einer bestimmten Anzahl von Elementen](https://stackoverflow .com/questions/58851190/how-to-wait-for-number-of-elements-to-be-loaded-using-selenium-and-python)

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage