JavaRush /Курсы /Python SELF /Обход нескольких страниц с минимальным использованием дин...

Обход нескольких страниц с минимальным использованием динамических элементов

Python SELF
38 уровень , 1 лекция
Открыта

1. Подготовка к навигации

Прежде чем приступить к нашим великим странствиям, нам нужно собраться, вооружившись правильным инструментарием: Selenium и чуточкой хитрости. Мы предполагаем, что вы уже знаете, как настроить Selenium и драйвер для браузера, так что поехали!

Настройка драйвера

Python

from selenium import webdriver

# Запуск драйвера браузера, например, Chrome
driver = webdriver.Chrome()

# Открываем первую страницу нашего приключения
driver.get("http://example.com/start-page")

Пока что всё стандартно — мы открыли браузер и загрузили стартовую страницу. Но вот где начинается веселье: мы не хотим просто залипнуть на одной странице. Мы хотим побывать на каждой её соседке!

2. Пагинация: прогулка по страницам

Самым простым и дружелюбным способом навигации по страницам является пагинация. Вы все видели эти милые маленькие цифры внизу страницы, не так ли? Они как указатели на дороге: «Ваша следующая остановка — страница 2».

Извлечение данных со страниц

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

Python

def extract_data():
    # Находим все элементы, которые нас интересуют на странице, например, заголовки
    titles = driver.find_elements_by_class_name("item-title")
    for title in titles:
        print(title.text)  # Да, мы просто выводим текст, но вы можете сохранять его где угодно

extract_data()

Если вы прогуливали предыдущие лекции, то этот кусочек кода ищет все заголовки с классом item-title и выводит их.

Навигация к следующей странице

Теперь, когда мы вооружены данными, пришло время отправиться дальше. Пагинация зачастую представлена в виде кнопок со ссылками на следующую или предыдущую страницу. Мы должны найти эти кнопки и нажать на них.

Python

def go_to_next_page():
    try:
        # Находим кнопку следующей страницы и кликаем по ней
        next_button = driver.find_element_by_link_text("Next")
        next_button.click()
    except NoSuchElementException:
        # Если кнопки нет, значит, мы достигли конца
        print("Конец списка страниц.")

Эта функция ищет ссылку с текстом «Next». Если она найдена, она кликает по ней, переходя к следующей странице. Если нет, наш бот понимает, что достиг конца интернета... ну, по крайней мере, этой последовательности страниц.

3. Циклический обход страниц

Чего нам не хватает для полного счастья? Правильно, цикла! Давайте объединим всё это в один удобный цикл, чтобы наш бот мог оббежать все доступные страницы, как настоящий профессионал.

Python

while True:
    extract_data()  # Собираем данные с текущей страницы
    go_to_next_page()  # Переходим к следующей
    time.sleep(2)  # Немного отдыхаем, чтобы не спугнуть сервер

Ну вот, теперь наш бот отважно обходит все страницы, на которых можно нажать кнопку «Next». Этот код будет исполняться до тех пор, пока не закончатся страницы. Помните, что небольшая пауза между запросами — это ваша дружба с сервером. Никто не любит спамеров, особенно админы сайтов.

4. Динамическое взаимодействие

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

Явное ожидание

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

Python

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def wait_for_element(locator):
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, locator))
        )
        return element
    except TimeoutException:
        print("Элемент не найден.")

С помощью этой функции ваш бот будет в гармонии с динамически подгружаемым контентом, ожидая, когда элементы станут доступными.

Прокрутка страницы

С динамическим контентом, содержащимся в таких волшебных страницах, как бесконечная прокрутка, нам может понадобиться прокручивать страницу вниз, чтобы больше элементов подгрузилось.

Python

def scroll_down():
    # Используем JavaScript для прокрутки вниз
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)

Скрипт на JavaScript помогает сделать плавную прокрутку вниз, давая возможность странице подгружать контент. Этим приемом можно воспользоваться в цикле, чтобы обойти бесконечную прокрутку.

5. Особенности и лайфхаки

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

Если кнопки «Next» нет, но есть пагинация с номерами страниц, используйте динамический подход, подставляя номер в URL напрямую. А если ваш сайт внезапно решил стать ниндзя и скрыть некоторые страницы, настройте свои скрипты так, чтобы они могли адаптироваться, оставаясь готовыми к неожиданностям.

Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Анатолий Уровень 53
23 февраля 2026
❤️