Skip to content
Intermediate / 2 min read

Как использовать ротационные резидентные прокси IPRoyal с Selenium на Python для веб-скрапинга

Практическое руководство по интеграции резидентных прокси IPRoyal с Selenium WebDriver на Python, включая аутентификацию, ротацию и устранение неполадок.

SOCKS5 HTTP(S) Веб-скрейпинг

Обзор

Selenium — популярный инструмент для автоматизации браузера, но для масштабного скрапинга часто требуется ротация IP-адресов, чтобы избежать блокировок. Сеть резидентных прокси IPRoyal предоставляет большой пул IP-адресов с гибкими опциями ротации. В этом руководстве показано, как подключить Selenium к резидентным прокси IPRoyal с помощью Python, обрабатывать аутентификацию и менять IP-адреса между запросами.

Поскольку Selenium не во всех драйверах поддерживает аутентификацию прокси изначально, мы будем использовать пакет selenium-wire, который расширяет Selenium и аккуратно обрабатывает учётные данные прокси. В примерах ниже используется Chrome, но такой же подход работает и с другими браузерами, поддерживаемыми Selenium.

Предварительные требования

  • Python 3.8 или новее
  • Аккаунт IPRoyal с учётными данными резидентных прокси
  • Базовое знакомство с Python и Selenium
  • Установленный браузер Chrome и ChromeDriver (или альтернативный драйвер браузера)

Шаг 1: Соберите учётные данные прокси IPRoyal

Войдите в свою панель управления IPRoyal и найдите сведения об эндпоинте резидентных прокси. Вам понадобятся:

  • Хост прокси (например, geo.iproyal.com или хост, указанный в вашей панели управления)
  • Номер порта
  • Имя пользователя
  • Пароль

Резидентные прокси IPRoyal обычно предлагают как ротационные, так и липкие сессии. При ротационных сессиях каждый запрос (или каждая новая сессия браузера) может использовать другой IP. При липких сессиях вы можете сохранять один и тот же IP в течение определённого периода, используя идентификатор сессии в имени пользователя. Проверьте точный формат в своей панели управления — часто идентификатор сессии добавляется к имени пользователя, например yourusername-session-abc123.

Шаг 2: Установите Selenium и selenium-wire

Установите необходимые пакеты с помощью pip:

pip install selenium selenium-wire

Убедитесь, что версия ChromeDriver соответствует установленной версии Chrome. Вы можете скачать ChromeDriver со страницы Chrome for Testing или использовать менеджер вроде webdriver-manager.

Шаг 3: Настройте Selenium с аутентификацией прокси IPRoyal

Создайте скрипт Python, который настраивает драйвер Selenium Wire с вашими учётными данными прокси IPRoyal. Замените заполнители на свои реальные значения.

from seleniumwire import webdriver

# Replace with your IPRoyal proxy details
proxy_user = "your_username"
proxy_pass = "your_password"
proxy_host = "your-iproyal-host"
proxy_port = "your_port"

# Build the proxy URL
proxy_url = f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}"

# Configure Selenium Wire proxy options
proxy_options = {
    'proxy': {
        'http': proxy_url,
        'https': proxy_url,
        'no_proxy': 'localhost,127.0.0.1'
    }
}

# Launch Chrome with Selenium Wire
driver = webdriver.Chrome(seleniumwire_options=proxy_options)

try:
    driver.get("https://httpbin.org/ip")
    print(driver.find_element("tag name", "body").text)
finally:
    driver.quit()

Запустите скрипт. Если прокси работает, вы должны увидеть IP-адрес, принадлежащий сети IPRoyal, а не ваш реальный IP.

Шаг 4: Ротация IP между запросами

Существует два распространённых способа ротации IP с резидентными прокси IPRoyal:

  1. Ротационный эндпоинт: используйте один и тот же хост и порт для каждого запроса. Прокси автоматически назначает новый IP для каждого соединения. Это самый простой метод для скрапинга без сохранения состояния.
  2. Липкие сессии с идентификатором сессии: добавьте уникальный идентификатор сессии к имени пользователя (например, yourusername-session-abc123). Все запросы с этим идентификатором сессии будут использовать один и тот же IP, пока сессия не истечёт или вы не измените идентификатор. Это полезно для многошаговых сценариев, таких как вход в систему, а затем сбор данных.

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

import time
from seleniumwire import webdriver

base_username = "your_username"
base_password = "your_password"
proxy_host = "your-iproyal-host"
proxy_port = "your_port"

session_ids = ["session1", "session2", "session3"]

for session_id in session_ids:
    # Construct username with session ID (adjust syntax per IPRoyal docs)
    username = f"{base_username}-session-{session_id}"
    proxy_url = f"http://{username}:{base_password}@{proxy_host}:{proxy_port}"

    proxy_options = {
        'proxy': {
            'http': proxy_url,
            'https': proxy_url,
            'no_proxy': 'localhost,127.0.0.1'
        }
    }

    driver = webdriver.Chrome(seleniumwire_options=proxy_options)
    try:
        driver.get("https://httpbin.org/ip")
        print(f"Session {session_id}:", driver.find_element("tag name", "body").text)
    finally:
        driver.quit()
    time.sleep(1)

Если IPRoyal предоставляет ротационный эндпоинт, который меняет IP при каждом запросе, можно пропустить логику с идентификатором сессии и использовать одни и те же учётные данные. Проверьте поведение в своей панели управления.

Шаг 5: Работа с геотаргетингом и липкими сессиями

Резидентные прокси IPRoyal поддерживают таргетинг по стране и городу. Обычно можно указать местоположение, добавив код страны к имени пользователя или используя выделенный эндпоинт. Например, многие провайдеры используют формат имени пользователя вроде yourusername-country-us. Проверьте точный синтаксис в своей панели управления IPRoyal.

Чтобы поддерживать липкую сессию для многошагового скрапинга (например, добавление в корзину, затем оформление заказа), используйте один идентификатор сессии для всех действий и держите один и тот же экземпляр драйвера открытым. Смена драйвера или идентификатора сессии приведёт к использованию другого IP.

Шаг 6: Проверьте прокси и обработайте ошибки

Всегда проверяйте, что ваши запросы идут через прокси. Простая проверка — посетить https://httpbin.org/ip или https://ipinfo.io/ip и убедиться, что IP не ваш собственный. Если нужно проверить заголовки, Selenium Wire позволяет получать доступ к объектам запросов и ответов:

for request in driver.requests:
    if request.response:
        print(request.url, request.response.status_code)

Устранение неполадок

Проблема Вероятная причина Решение
407 Proxy Authentication Required Неверное имя пользователя/пароль или специальные символы не закодированы в URL Закодируйте специальные символы в имени пользователя/пароле для URL (например, @ становится %40). Проверьте учётные данные в панели управления IPRoyal.
Тайм-аут соединения Неверный хост/порт или блокировка брандмауэром Перепроверьте хост и порт. Попробуйте другой порт, если IPRoyal предоставляет альтернативы. Убедитесь, что ваш брандмауэр разрешает исходящие соединения.
IP не меняется Используется идентификатор липкой сессии или кэшированное соединение Используйте ротационный эндпоинт или измените идентификатор сессии. Закройте драйвер и откройте новый.
Ошибка WebDriver при запуске Несоответствие версии ChromeDriver Обновите ChromeDriver, чтобы он соответствовал версии Chrome.
Ошибки SSL Прокси неправильно обрабатывает HTTPS Убедитесь, что вы используете http:// в URL прокси даже для HTTPS-сайтов (прокси туннелирует HTTPS).

Итог

В этом руководстве вы узнали, как интегрировать резидентные прокси IPRoyal с Selenium на Python, используя selenium-wire для аутентификации. Вы настроили один прокси, реализовали ротацию с помощью идентификаторов липких сессий и проверили настройку. Не забывайте использовать ротационные эндпоинты для высокообъёмного скрапинга, а липкие сессии — для многошаговых сценариев. Всегда проверяйте подключение через прокси перед запуском больших задач и обращайтесь к своей панели управления IPRoyal для точного формата эндпоинта и параметров сессии.