Wie kann sichergestellt werden, dass mehrere Elemente in Python Selenium geladen werden?

DDD
Freigeben: 2024-10-30 00:52:02
Original
771 Leute haben es durchsucht

How to Ensure Multiple Elements Load in Python Selenium?

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

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

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

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>
Nach dem Login kopieren
<code class="python">WebDriverWait(driver, 30).until(MoreThanOne('li'))</code>
Nach dem Login kopieren

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

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!