Skip to content
Beginner / 3 min read

Selenium Rotating Proxy: ротация IP в Selenium WebDriver (руководство для начинающих)

Понятное руководство для начинающих по ротации прокси в Selenium WebDriver. Настройте список прокси, обработайте аутентификацию, проверьте смену IP и узнайте, когда выделенный шлюз WireGuard от NordLayer — более разумный выбор.

SOCKS5 WireGuard Веб-скрейпинг Приватность/Анонимность

Обзор

Selenium WebDriver не выполняет ротацию прокси самостоятельно. Когда вы парсите или тестируете в больших объёмах, один IP-адрес быстро упирается в лимиты запросов, геоблокировки или CAPTCHA. В этом руководстве показано, как назначить прокси для Selenium, переключаться по списку прокси, проверять, что IP действительно изменился, и решать, когда выделенный шлюз WireGuard (например, NordLayer) подходит лучше, чем пул ротируемых прокси.

Зачем ротировать прокси в Selenium?

  • Избегать лимитов по IP и временных блокировок.
  • Получать доступ к контенту, доступному только в определённых регионах.
  • Проверять, как ваш сайт или приложение работает из разных локаций.
  • Распределять запросы так, чтобы один IP не выглядел как бот.

Стратегии ротации

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

  • Ротация по списку — циклический перебор фиксированного списка прокси. Просто и бесплатно, но каждый прокси используется повторно.
  • Случайная ротация — случайный прокси для каждой сессии. Снижает предсказуемые шаблоны.
  • Round-robin — использование прокси по порядку. Хорошо для равномерного распределения.
  • Sticky-сессия — один и тот же прокси для входа в систему или оформления заказа, затем переключение.
  • Ротирующий шлюз — одна конечная точка, которая ротирует IP на стороне провайдера. Меньше кода, но меньше контроля.

Для многих небольших проектов достаточно случайного выбора из списка. Для продакшен-парсинга рассмотрите управляемый сервис ротируемых прокси или выделенный шлюз WireGuard для стабильного доступа без ротации.

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

  • Python 3.8 или новее.
  • Установленный Google Chrome или Mozilla Firefox.
  • Список прокси (HTTP, HTTPS или SOCKS5) либо подписка на ротируемые прокси.
  • Базовое знакомство с запуском Python-скриптов.

Шаги

  1. Установите Selenium и менеджер WebDriver.

    Установите Selenium и помощник, который автоматически скачивает подходящий драйвер браузера.

    pip install selenium webdriver-manager
    
  2. Подготовьте список прокси.

    Создайте список прокси в Python. Используйте полную схему, чтобы Selenium знал, как подключаться.

    PROXIES = [
        'http://user:[email protected]:8080',
        'http://proxy2.example.com:8080',
        'socks5://proxy3.example.com:1080',
    ]
    

    Если для ваших прокси требуются имя пользователя и пароль, перед продолжением см. Шаг 4.

  3. Настройте один прокси в Selenium (Chrome).

    Передайте прокси в Chrome с помощью аргумента --proxy-server.

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from webdriver_manager.chrome import ChromeDriverManager
    from selenium.webdriver.chrome.service import Service
    
    proxy = 'http://proxy2.example.com:8080'
    
    options = Options()
    options.add_argument(f'--proxy-server={proxy}')
    options.add_argument('--headless=new')
    
    driver = webdriver.Chrome(
        service=Service(ChromeDriverManager().install()),
        options=options
    )
    driver.get('https://api.ipify.org?format=json')
    print(driver.page_source)
    driver.quit()
    

    Chrome не принимает учётные данные внутри строки --proxy-server. Если вашему прокси нужна аутентификация, используйте белый список IP или переключитесь на Firefox (Шаг 4).

  4. Обработайте аутентификацию прокси.

    Профили Firefox могут передавать учётные данные прокси. Это полезно для простых настроек без дополнительных библиотек.

    from selenium import webdriver
    from selenium.webdriver.firefox.options import Options
    
    proxy_host = 'proxy2.example.com'
    proxy_port = 8080
    
    options = Options()
    options.set_preference('network.proxy.type', 1)
    options.set_preference('network.proxy.http', proxy_host)
    options.set_preference('network.proxy.http_port', proxy_port)
    options.set_preference('network.proxy.ssl', proxy_host)
    options.set_preference('network.proxy.ssl_port', proxy_port)
    
    driver = webdriver.Firefox(options=options)
    driver.get('https://api.ipify.org?format=json')
    print(driver.page_source)
    driver.quit()
    

    Для SOCKS5 с аутентификацией самый простой путь для начинающих — запросить у провайдера прокси доступ по белому списку IP. Так вы никогда не встраиваете пароль в скрипт.

  5. Ротируйте прокси для каждой сессии.

    Создавайте новый WebDriver со случайно выбранным прокси для каждого URL или задачи. Всегда закрывайте драйвер по завершении.

    import random
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from webdriver_manager.chrome import ChromeDriverManager
    from selenium.webdriver.chrome.service import Service
    
    PROXIES = [
        'http://proxy1.example.com:8080',
        'http://proxy2.example.com:8080',
        'socks5://proxy3.example.com:1080',
    ]
    
    def get_driver():
        proxy = random.choice(PROXIES)
        options = Options()
        options.add_argument(f'--proxy-server={proxy}')
        options.add_argument('--headless=new')
        return webdriver.Chrome(
            service=Service(ChromeDriverManager().install()),
            options=options
        )
    
    urls = [
        'https://example.com/page-1',
        'https://example.com/page-2',
    ]
    
    for url in urls:
        driver = get_driver()
        try:
            driver.get(url)
            print(driver.title)
        finally:
            driver.quit()
    

    Этот шаблон легко читается, но запуск нового браузера для каждого запроса — медленный. Для больших задач запускайте несколько драйверов параллельно или используйте конечную точку ротирующего шлюза. Если вам нужен стабильный, не меняющийся IP для входов или админ-панелей, перейдите к Шагу 7.

  6. Проверьте, что IP-адрес изменился.

    Никогда не предполагайте, что прокси сработал. Проверяйте исходящий IP перед парсингом.

    import json
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.add_argument('--proxy-server=http://proxy2.example.com:8080')
    options.add_argument('--headless=new')
    
    driver = webdriver.Chrome(options=options)
    driver.get('https://api.ipify.org?format=json')
    body = driver.find_element('tag name', 'body').text
    ip_info = json.loads(body)
    print(ip_info['ip'])
    driver.quit()
    

    Если выведенный IP совпадает с вашим реальным IP, прокси не используется. Проверьте формат прокси и аутентификацию.

  7. Выбирайте между ротируемыми прокси и выделенным шлюзом WireGuard.

    Ротируемые прокси идеальны для анонимных запросов в большом объёме. Но некоторым задачам нужно обратное: стабильный IP бизнес-класса, который остаётся неизменным для каждого запроса.

    Используйте выделенный шлюз WireGuard, например NordLayer, когда вам нужны:

    • Постоянный исходящий IP для членов команды или автоматизированных задач.
    • Зашифрованные туннели вместо настроек прокси для каждого приложения.
    • Быстрое подключение небольшой команды без поддержки списков прокси.
    • Отдельный сетевой путь для внутренних инструментов, staging-сайтов или отслеживания позиций из одного региона.

    NordLayer предоставляет туннели WireGuard VPN бизнес-класса с выделенными шлюзами и фиксированной месячной оплатой. Это не пул ротируемых прокси, поэтому используйте его для сессий, которые должны оставаться на одном IP. Используйте ротируемые прокси, когда каждый запрос должен исходить с разного адреса.

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

Симптом Вероятная причина Исправление
В подключении к прокси отказано Неверный хост, порт или схема Проверьте, что строка прокси включает http:// или socks5://
407 Proxy Authentication Required Отсутствуют учётные данные Используйте белый список IP или профиль Firefox с аутентификацией
Сессия WebDriver не создана Несовпадение версий браузера и драйвера Обновите Selenium и webdriver-manager
Запросы всё ещё показывают ваш реальный IP Прокси не применён Убедитесь, что --proxy-server задан до driver.get()
CAPTCHA или страница блокировки Слишком много запросов или прокси помечен Замедлитесь, ротируйте аккуратнее или используйте резидентные/ISP IP
Прокси SOCKS5 не работает в Chrome Chrome не поддерживает аутентификацию прокси для SOCKS5 в аргументе Используйте Firefox или аутентифицированный корпоративный туннель, например NordLayer

Итоги

  • Selenium не ротирует прокси автоматически; вы назначаете один прокси на сессию браузера.
  • Начинающим стоит начать с небольшого списка прокси, случайного выбора и нового драйвера для каждой задачи.
  • Профили Firefox справляются с аутентификацией прокси проще, чем Chrome.
  • Всегда проверяйте исходящий IP через сервис вроде ipify, прежде чем доверять прокси.
  • Ротируемые прокси лучше всего подходят для распределённого анонимного парсинга.
  • Выделенный шлюз WireGuard, например NordLayer, лучше, когда вам нужен стабильный, зашифрованный IP бизнес-класса для команд и долгоживущих сессий.