«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как обеспечить загрузку нескольких элементов в Python Selenium?

Как обеспечить загрузку нескольких элементов в Python Selenium?

Опубликовано 8 ноября 2024 г.
Просматривать:736

How to Ensure Multiple Elements Load in Python Selenium?

Python Selenium: обеспечение загрузки нескольких элементов

При работе с динамически загружаемыми элементами через AJAX может быть сложно подтвердить их внешний вид. Чтобы справиться с этим сценарием, мы будем использовать WebDriverWait Selenium и его различные стратегии, чтобы гарантировать наличие нескольких элементов.

Видимость всех элементов:

Чтобы проверить видимость все элементы, соответствующие определенному селектору, мы можем использовать условие видимости_of_all_elements_located():

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]")
    )
)

Ожидание определенного количества элементов:

Если вам нужно дождаться загрузки определенного количества элементов, вы можете использовать лямбда-функцию с ExpectedConditions класс:

WebDriverWait(driver, 20).until(
    lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength)
)

XPath для дочерних элементов:

Чтобы дождаться дочерних элементов внутри родительского элемента, вместо поиска по всему DOM, вы можете использовать выражения XPath:

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_')]")
    )
)

Пользовательские условия ожидания:

Если вы предпочитаете создавать собственные условия ожидания, вы можете определить подкласс webdriver.support.ui.ExpectedCondition:

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'))

Предотвращение потери элементов в DOM:

Чтобы не потерять текущий элемент после операции поиска, сохраните его в переменной перед выполнением ожидания:

element = driver.find_element_by_css_selector('ul')
WebDriverWait(element, 30).until(MoreThanOne('li'))

Вывод:

Эти методы обеспечивают гибкий и надежный способ ожидания загрузки несколько элементов в Selenium. В зависимости от ваших требований выберите подход, который лучше всего соответствует вашему варианту использования.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3