December 4

Почему вам нужен прокси в Selenium

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

Это руководство проведёт вас через практические, ориентированные на примеры методы настройки прокси в Selenium с Python, включая Chrome, Firefox, SOCKS, аутентификацию, ротацию и советы по устранению распространённых проблем.

Зачем прокси полезны для Selenium

Прокси нужны не только для обхода ограничений — это стратегические инструменты. С их помощью вы можете:

  • Менять IP-адрес и появляться в любой точке мира.
  • Обходить лимиты, чтобы автоматизация работала без перебоев.
  • Получать доступ к контенту с гео-ограничениями.
  • Изолировать сессии при тестировании нескольких пользователей.
  • Усилить анонимность при скрапинге или тестировании чувствительных процессов.

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

Как Selenium управляет прокси

Selenium напрямую не управляет прокси. Вместо этого он передаёт настройки браузеру через capabilities или options. Настройка зависит от браузера:

  • Chrome: через ChromeOptions для HTTP/HTTPS/SOCKS.
  • Firefox: через профиль с нужными предпочтениями.
  • Edge: аналогично Chrome с особенностями для Edge.

Типичные требования:

  • Selenium WebDriver
  • Драйвер браузера (например, ChromeDriver)
  • Хост и порт прокси
  • Опционально: имя пользователя и пароль для аутентифицированных прокси

Настройка прокси в Chrome

Для HTTP/HTTPS прокси без аутентификации:

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

proxy = "123.45.67.89:8080"
chrome_options = Options()
chrome_options.add_argument(f"--proxy-server=http://{proxy}")

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://example.com")

Если нужно запускать в headless режиме:

chrome_options.add_argument("--headless")

Теперь Chrome работает невидимо, направляя весь трафик через прокси.

Настройка аутентифицированных прокси в Chrome

Chrome не поддерживает username/password через командную строку. Решение — лёгкое динамически создаваемое расширение Chrome:

import zipfile

def create_extension(proxy_host, proxy_port, username, password):
    manifest = """
    {
      "version": "1.0.0",
      "manifest_version": 2,
      "name": "ProxyAuth",
      "permissions": ["proxy","tabs","unlimitedStorage","storage","<all_urls>","webRequest","webRequestBlocking"],
      "background": {"scripts": ["background.js"]}
    }
    """
    background = f"""
    chrome.proxy.settings.set({{
      value: {{
        mode: "fixed_servers",
        rules: {{
          singleProxy: {{ scheme: "http", host: "{proxy_host}", port: parseInt({proxy_port}) }}
        }}
      }},
      scope: "regular"
    }});
    chrome.webRequest.onAuthRequired.addListener(
      function handler(details) {{ return {{ authCredentials: {{username: "{username}", password: "{password}"}} }}; }},
      {{urls: ["<all_urls>"]}}, ["blocking"]
    );
    """
    with zipfile.ZipFile("proxy_auth.zip", "w") as zp:
        zp.writestr("manifest.json", manifest)
        zp.writestr("background.js", background)

Загрузите расширение и запустите Chrome:

chrome_options = Options()
chrome_options.add_extension("proxy_auth.zip")

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://example.com")

Selenium Wire — мощная альтернатива для аутентифицированных прокси и инспекции сетевого трафика.

Настройка прокси в Firefox

Firefox позволяет более прямую настройку через профили:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", "123.45.67.89")
profile.set_preference("network.proxy.http_port", 8080)
profile.set_preference("network.proxy.ssl", "123.45.67.89")
profile.set_preference("network.proxy.ssl_port", 8080)
profile.update_preferences()

options = Options()
driver = webdriver.Firefox(firefox_profile=profile, options=options)
driver.get("https://example.com")

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

Настройка SOCKS-прокси

Для высокой анонимности или сложного скрапинга SOCKS-прокси идеальны. Пример для Chrome:

proxy = "123.45.67.89:1080"
chrome_options.add_argument(f"--proxy-server=socks5://{proxy}")

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://example.com")

Комбинируйте с headless режимом для невидимой, высокоанонимной автоматизации.

Управление прокси и ротация

Один прокси долго не выдержит. Сайты быстро определяют повторяющийся трафик с одного IP. Ротация прокси позволяет оставаться незаметным, регулярно меняя IP:

import random
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

proxies = ["123.45.67.89:8080", "98.76.54.32:3128", "11.22.33.44:8000"]

def get_random_proxy():
    return random.choice(proxies)

for _ in range(5):
    proxy = get_random_proxy()
    chrome_options = Options()
    chrome_options.add_argument(f"--proxy-server=http://{proxy}")
    driver = webdriver.Chrome(options=chrome_options)
    driver.get("https://httpbin.org/ip")
    print(driver.page_source)
    driver.quit()

Для профессиональных сценариев интегрируйте библиотеки или сервисы для автоматической ротации, проверки состояния и работы с аутентифицированными прокси.

Проверка прокси

После настройки убедитесь, что всё работает:

driver.get("https://httpbin.org/ip")

Возвращаемый IP должен совпадать с вашим прокси. Это гарантирует, что автоматизация идёт через нужный маршрут сети.

Советы по устранению неполадок

  • Браузер игнорирует прокси: проверьте, совпадает ли схема прокси (http, https, socks4, socks5).
  • Всплывающие окна аутентификации: используйте расширение Chrome или Selenium Wire.
  • Ошибки подключения: проверьте учётные данные, правила брандмауэра и доступность прокси.
  • Проблемы с HTTPS: некоторые прокси требуют туннелирования CONNECT.

Заключение

Настройка прокси в Selenium проще, чем кажется. Для анонимности, геотестирования, скрапинга или управления несколькими сессиями прокси превращают Selenium в гибкий и мощный инструмент автоматизации.

С примерами для Chrome, Firefox, HTTP, HTTPS, SOCKS и аутентифицированных прокси вы теперь можете контролировать каждый аспект автоматизированного трафика. Добавьте ротацию и тестирование прокси — ваши скрипты станут более надёжными, устойчивыми и практически незаметными.