Перейти к содержимому

Как настроить прокси для Selenium в Python: полный гайд

Инструменты
Как настроить прокси для Selenium в Python: полный гайд

Настройка прокси в Selenium на Python выполняется через объект Options соответствующего браузера или с помощью специализированных библиотек вроде Selenium-wire для поддержки авторизации. Использование качественных резидентских или мобильных прокси от GProxy позволяет эффективно обходить антифрод-системы, скрывать реальный IP-адрес и имитировать действия обычных пользователей из любой точки мира.

Зачем использовать прокси в связке с Selenium

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

Основные задачи, которые решают прокси:

  • Обход лимитов (Rate Limiting): Сайты ограничивают количество действий с одного IP в единицу времени. Ротация адресов позволяет распределять нагрузку.
  • Геолокация: Проверка отображения контента для пользователей из разных стран или городов.
  • Анонимизация: Скрытие факта автоматизации. При использовании элитных прокси сервер не видит реальный IP и не знает, что запрос идет через посредника.
  • Обход блокировок по типу сети: Многие сервисы блокируют трафик из дата-центров. Резидентские прокси GProxy решают эту проблему, так как они выглядят как трафик от реальных провайдеров (ISP).

Базовая настройка прокси в Selenium 4

В актуальной версии Selenium 4 настройка прокси для Chrome и Firefox осуществляется через классы Options. Это самый простой способ, который работает для прокси без авторизации или с привязкой по IP (IP Whitelisting).

Настройка для Google Chrome

Для Chrome используется аргумент --proxy-server. Вы можете передать как HTTP, так и SOCKS5 прокси.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

chrome_options = Options()
# Формат: IP:PORT
proxy_server = "185.123.456.78:8000" 
chrome_options.add_argument(f'--proxy-server={proxy_server}')

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
driver.get("https://2ip.ru")
# Проверка IP в консоли
print(driver.title)

Настройка для Firefox

В Firefox механизм реализован через объект Proxy из модуля selenium.webdriver.common.proxy, который затем передается в Options.

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.proxy import Proxy, ProxyType

proxy_ip_port = "185.123.456.78:8000"
proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.http_proxy = proxy_ip_port
proxy.ssl_proxy = proxy_ip_port

options = Options()
options.proxy = proxy

driver = webdriver.Firefox(options=options)
driver.get("https://ident.me")
Как настроить прокси для Selenium в Python: полный гайд

Авторизация по логину и паролю

Стандартный аргумент --proxy-server в Chrome не поддерживает передачу учетных данных в формате user:pass@ip:port. Если ваши прокси от GProxy требуют авторизации, есть два основных пути: использование расширения (Proxy Auth Extension) или библиотека Selenium-wire.

Метод 1: Использование расширения для Chrome

Этот метод считается наиболее стабильным и быстрым. Мы динамически создаем ZIP-архив с расширением, которое перехватывает запрос на авторизацию и подставляет логин и пароль.

import os
import zipfile
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def create_proxy_auth_extension(proxy_host, proxy_port, proxy_user, proxy_pass, folder):
    manifest_json = """
    {
        "version": "1.0.0",
        "manifest_version": 2,
        "name": "GProxy Auth",
        "permissions": [
            "proxy",
            "tabs",
            "unlimitedStorage",
            "storage",
            "",
            "webRequest",
            "webRequestBlocking"
        ],
        "background": {
            "scripts": ["background.js"]
        },
        "minimum_chrome_version":"22.0.0"
    }
    """
    background_js = f"""
    var config = {{
            mode: "fixed_servers",
            rules: {{
              singleProxy: {{
                scheme: "http",
                host: "{proxy_host}",
                port: parseInt({proxy_port})
              }},
              bypassList: ["localhost"]
            }}
          }};
    chrome.proxy.settings.set({{value: config, scope: "regular"}}, function() {{}});
    function callbackFn(details) {{
        return {{
            authCredentials: {{
                username: "{proxy_user}",
                password: "{proxy_pass}"
            }}
        }};
    }}
    chrome.webRequest.onAuthRequired.addListener(
                callbackFn,
                {{urls: [""]}},
                ['blocking']
    );
    """
    extension_path = os.path.join(folder, 'proxy_auth_plugin.zip')
    with zipfile.ZipFile(extension_path, 'w') as zp:
        zp.writestr("manifest.json", manifest_json)
        zp.writestr("background.js", background_js)
    return extension_path

options = Options()
proxy_ext = create_proxy_auth_extension("proxy.gproxy.site", 1000, "user123", "pass456", "temp")
options.add_extension(proxy_ext)
driver = webdriver.Chrome(options=options)

Метод 2: Selenium-wire

Библиотека selenium-wire расширяет возможности стандартного Selenium, позволяя перехватывать все запросы и легко настраивать прокси с авторизацией через словарь proxy_storage.

from seleniumwire import webdriver # Обратите внимание на импорт

options = {
    'proxy': {
        'http': 'http://user:pass@ip:port',
        'https': 'https://user:pass@ip:port',
        'no_proxy': 'localhost,127.0.0.1'
    }
}

driver = webdriver.Chrome(seleniumwire_options=options)
driver.get("https://google.com")

Выбор типа прокси для Selenium

Результативность автоматизации напрямую зависит от типа используемых прокси. GProxy предоставляет различные решения под конкретные задачи.

Тип прокси Уровень доверия (Trust Score) Скорость Сценарий использования
Дата-центр (DC) Низкий Очень высокая Парсинг простых сайтов без защиты, тесты скорости.
Резидентские (Residential) Высокий Средняя Масштабируемый парсинг, обход Cloudflare, работа с соцсетями.
Мобильные (4G/5G) Максимальный Высокая Регистрация аккаунтов, обход самых жестких антифрод-систем.
Как настроить прокси для Selenium в Python: полный гайд

Продвинутые сценарии и оптимизация

При работе с Selenium важно не только настроить прокси, но и правильно сконфигурировать сам браузер, чтобы избежать детектирования.

Использование SOCKS5

SOCKS5 — более совершенный протокол по сравнению с HTTP. Он передает данные в чистом виде, не добавляя HTTP-заголовков, которые могут выдать использование прокси. В GProxy поддержка SOCKS5 реализована на всех тарифах. Для использования в Selenium через add_argument укажите схему:

chrome_options.add_argument('--proxy-server=socks5://185.123.456.78:8000')

Headless режим и прокси

Запуск браузера без графического интерфейса (--headless) часто используется на серверах. Однако в этом режиме некоторые сайты ведут себя иначе. При использовании прокси в headless-режиме обязательно добавляйте user-agent, иначе стандартный заголовок выдаст автоматизацию.

options.add_argument('--headless=new')
options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36')

Ротация через GProxy API

Для профессионального скрапинга недостаточно одного IP. GProxy предоставляет возможность автоматической ротации. Вы можете либо использовать "endpoint" с ротацией на стороне сервера (каждый запрос — новый IP), либо менять IP по API. Интеграция в Python выглядит так:

import requests
import time

def rotate_gproxy_ip(api_key):
    # Пример вызова API для смены IP на порту
    response = requests.get(f"https://api.gproxy.site/rotate?key={api_key}")
    if response.status_code == 200:
        print("IP успешно изменен")
    time.sleep(5) # Пауза для обновления соединения

Отладка и решение проблем

Если прокси не работает, проверьте следующие моменты:

  1. Протокол: Убедитесь, что вы используете правильный префикс (http:// или socks5://).
  2. Брандмауэр: Проверьте, разрешены ли исходящие соединения на порты прокси (обычно 8000, 10000 или другие).
  3. Формат авторизации: Если используете Selenium-wire, проверьте корректность спецсимволов в пароле. Если в пароле есть знак @, его нужно закодировать (URL encode).
  4. DNS утечки: По умолчанию Selenium может использовать системный DNS. Для полной анонимности в Firefox используйте настройку network.proxy.socks_remote_dns.

Выводы

Настройка прокси в Selenium — это фундамент для стабильной автоматизации. Для простых задач достаточно стандартных Options, но для серьезных проектов с авторизацией лучше использовать метод с расширением или selenium-wire. Выбор между типами прокси зависит от бюджета и сложности целевого ресурса: резидентские прокси GProxy являются "золотым стандартом" для обхода большинства современных защит.

Практические советы:

  • Всегда проверяйте текущий IP в начале скрипта через запрос к https://api.ipify.org?format=json, чтобы убедиться, что прокси активен.
  • Используйте резидентские прокси для парсинга данных и мобильные для действий, связанных с социальными сетями или регистрациями.
  • Не забывайте про эмуляцию отпечатков браузера (Canvas, WebGL), так как одного прокси часто недостаточно для полной маскировки бота.
support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.