Комбинирование .find_element() и .find_elements()



Комбинирование find_element() и find_elements() дает вам гибкость и повышает уровень контроля над автоматизацией задач при работе с веб-страницами. Давай разберемся подробнее:

Каскадный поиск

Иногда, чтобы добраться до конкретного элемента, нужно сначала найти его «родительский» элемент, и уже внутри него искать дочерний.

# Ищем родительский элемент
parent_element = driver.find_element(By.ID, 'parent_id')

# Ищем дочерний элемент внутри родительского
child_element = parent_element.find_element(By.CLASS_NAME, 'child_class')

# Или тот же самый поиск в одну строку
element = driver.find_element(By.ID, 'parent_id').find_element(By.CLAS

Поиск внутри списка элементов

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

# Ищем все блоки
blocks = driver.find_elements(By.CLASS_NAME, 'block')

# Проходим по каждому блоку и кликаем на кнопку внутри
for block in blocks:
    button = block.find_element(By.CLASS_NAME, 'button')
    button.click()

Проверка существования элементов

Вы можете сначала проверить, есть ли на странице интересующие вас элементы, и только затем с ними взаимодействовать.

# Ищем все элементы с классом 'some_class'
elements = driver.find_elements(By.CLASS_NAME, 'some_class')

# Если элементы найдены, кликаем на первый
if elements:
    elements[0].click()

Пример кода

Псевдокод который делает запрос к несуществующему сайту, но наглядно демонстрирующий использование элементов find_element() и find_elements().

from selenium import webdriver
from selenium.webdriver.common.by import By

# Инициализация драйвера в блоке with для автоматического закрытия
with webdriver.Chrome() as driver:
    # Открытие веб-страницы
    driver.get("http://some-news-website.com")
    # Ищем все блоки новостей
    news_blocks = driver.find_elements(By.CLASS_NAME, 'news-block')
    # Проходимся по каждому блоку
    for block in news_blocks:
        # В каждом блоке ищем заголовок
        title_element = block.find_element(By.CLASS_NAME, 'title')
        # Допустим, выводим текст каждого заголовка
        print("Заголовок новости:", title_element.text)
# Браузер закроется автоматически после выхода из блока with

Сначала мы используем find_elements() для поиска всех элементов с классом .news-block. Полученный список сохраняем в переменную news_blocks.

Затем мы проходимся по этому списку в цикле for.

Внутри каждого блока news-block мы используем find_element() для поиска элемента с классом .title.

Извлекаем и выводим текст из каждого найденного заголовка.



Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: