Назад к блогу

Настройка прокси в Selenium WebDriver: полное руководство с примерами кода для Python и Java

Подробная инструкция по интеграции прокси в Selenium WebDriver с примерами кода на Python и Java для Chrome и Firefox.

📅13 февраля 2026 г.

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

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

При автоматизации веб-скрапинга или тестирования через Selenium возникает несколько задач, которые невозможно решить без прокси:

  • Обход rate limiting — многие сайты ограничивают количество запросов с одного IP-адреса. Без прокси ваш скрипт быстро получит блокировку после 50-100 запросов.
  • Географические ограничения — если нужно парсить контент, доступный только из определённой страны, прокси с IP нужной геолокации решает эту задачу.
  • Распределение нагрузки — при массовом парсинге данных ротация IP-адресов через прокси позволяет распределить запросы и избежать детектирования ботов.
  • Тестирование локализации — для проверки, как сайт отображается пользователям из разных стран, необходимы прокси соответствующих регионов.
  • Обход антибот-систем — современные защиты (Cloudflare, DataDome) анализируют IP-репутацию. Качественные прокси помогают выглядеть как обычный пользователь.

Без правильной настройки прокси ваш Selenium-скрипт будет работать нестабильно: получать капчи, временные баны или полную блокировку доступа. Особенно это критично при парсинге e-commerce площадок, социальных сетей или сайтов с агрессивной защитой от ботов.

Какие типы прокси использовать

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

Тип прокси Скорость Анонимность Лучшие сценарии
Прокси дата-центров Очень высокая (100+ Мбит/с) Средняя Парсинг публичных данных, тестирование производительности, массовые проверки
Резидентные прокси Средняя (10-50 Мбит/с) Очень высокая Обход антибот-систем, парсинг соцсетей, e-commerce, сайтов с жёсткой защитой
Мобильные прокси Средняя (5-30 Мбит/с) Максимальная Работа с мобильными версиями сайтов, соцсети, приложения с проверкой мобильных IP

Рекомендации по выбору:

  • Для парсинга новостных сайтов, открытых API, простых каталогов — подойдут прокси дата-центров. Они дешевле и быстрее.
  • Для работы с Amazon, eBay, Google, социальными сетями — только резидентные прокси. Эти платформы активно блокируют IP дата-центров.
  • Для эмуляции мобильных пользователей или работы с Instagram, TikTok — мобильные прокси незаменимы.
  • Для тестирования геолокации — выбирайте прокси с возможностью выбора конкретной страны и города.

Настройка прокси для Chrome в Selenium

Chrome WebDriver — наиболее популярный выбор для Selenium-автоматизации. Настройка прокси выполняется через объект ChromeOptions. Рассмотрим несколько способов.

Способ 1: HTTP/HTTPS прокси без авторизации (Python)

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}')

# Дополнительные опции для стабильности
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')

# Запуск драйвера
driver = webdriver.Chrome(options=chrome_options)

# Проверка IP
driver.get('https://httpbin.org/ip')
print(driver.page_source)

driver.quit()

Способ 2: SOCKS5 прокси (Python)

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

PROXY = "123.45.67.89:1080"

chrome_options = Options()
# Для SOCKS5 указываем протокол явно
chrome_options.add_argument(f'--proxy-server=socks5://{PROXY}')

driver = webdriver.Chrome(options=chrome_options)
driver.get('https://httpbin.org/ip')
print(driver.page_source)
driver.quit()

Важно: Chrome поддерживает HTTP, HTTPS и SOCKS5 прокси. Для SOCKS4 потребуются дополнительные настройки или использование расширений.

Настройка прокси для Chrome в Java

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.Proxy;

public class ChromeProxyExample {
    public static void main(String[] args) {
        // Настройка прокси
        Proxy proxy = new Proxy();
        proxy.setHttpProxy("123.45.67.89:8080");
        proxy.setSslProxy("123.45.67.89:8080");
        
        ChromeOptions options = new ChromeOptions();
        options.setProxy(proxy);
        options.addArguments("--no-sandbox");
        
        WebDriver driver = new ChromeDriver(options);
        driver.get("https://httpbin.org/ip");
        
        System.out.println(driver.getPageSource());
        driver.quit();
    }
}

Настройка прокси для Firefox в Selenium

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

HTTP/HTTPS прокси для Firefox (Python)

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

PROXY_HOST = "123.45.67.89"
PROXY_PORT = 8080

firefox_options = Options()

# Настройка прокси через preferences
firefox_options.set_preference("network.proxy.type", 1)
firefox_options.set_preference("network.proxy.http", PROXY_HOST)
firefox_options.set_preference("network.proxy.http_port", PROXY_PORT)
firefox_options.set_preference("network.proxy.ssl", PROXY_HOST)
firefox_options.set_preference("network.proxy.ssl_port", PROXY_PORT)

# Отключение прокси для локальных адресов
firefox_options.set_preference("network.proxy.no_proxies_on", "localhost,127.0.0.1")

driver = webdriver.Firefox(options=firefox_options)
driver.get('https://httpbin.org/ip')
print(driver.page_source)
driver.quit()

SOCKS5 прокси для Firefox (Python)

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

PROXY_HOST = "123.45.67.89"
PROXY_PORT = 1080

firefox_options = Options()

firefox_options.set_preference("network.proxy.type", 1)
firefox_options.set_preference("network.proxy.socks", PROXY_HOST)
firefox_options.set_preference("network.proxy.socks_port", PROXY_PORT)
firefox_options.set_preference("network.proxy.socks_version", 5)

# Для SOCKS5 с DNS через прокси
firefox_options.set_preference("network.proxy.socks_remote_dns", True)

driver = webdriver.Firefox(options=firefox_options)
driver.get('https://httpbin.org/ip')
print(driver.page_source)
driver.quit()

Преимущество Firefox: параметр network.proxy.socks_remote_dns позволяет выполнять DNS-запросы через прокси, что повышает анонимность и помогает обходить блокировки на уровне DNS.

Работа с прокси, требующими авторизацию

Большинство качественных прокси-сервисов используют авторизацию по логину и паролю. Selenium не поддерживает передачу credentials напрямую в URL прокси для Chrome, поэтому требуются обходные решения.

Способ 1: Chrome Extension для авторизации (рекомендуемый)

Создаём временное расширение Chrome, которое автоматически подставляет логин и пароль при подключении к прокси:

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

PROXY_HOST = "123.45.67.89"
PROXY_PORT = 8080
PROXY_USER = "username"
PROXY_PASS = "password"

# Создание манифеста расширения
manifest_json = """
{
    "version": "1.0.0",
    "manifest_version": 2,
    "name": "Chrome Proxy",
    "permissions": [
        "proxy",
        "tabs",
        "unlimitedStorage",
        "storage",
        "webRequest",
        "webRequestBlocking"
    ],
    "background": {
        "scripts": ["background.js"]
    }
}
"""

# Скрипт для авторизации
background_js = """
var config = {
    mode: "fixed_servers",
    rules: {
        singleProxy: {
            scheme: "http",
            host: "%s",
            port: parseInt(%s)
        },
        bypassList: ["localhost"]
    }
};

chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});

function callbackFn(details) {
    return {
        authCredentials: {
            username: "%s",
            password: "%s"
        }
    };
}

chrome.webRequest.onAuthRequired.addListener(
    callbackFn,
    {urls: [""]},
    ['blocking']
);
""" % (PROXY_HOST, PROXY_PORT, PROXY_USER, PROXY_PASS)

# Создание расширения
plugin_path = 'proxy_auth_plugin.zip'
with zipfile.ZipFile(plugin_path, 'w') as zp:
    zp.writestr("manifest.json", manifest_json)
    zp.writestr("background.js", background_js)

# Запуск Chrome с расширением
chrome_options = Options()
chrome_options.add_extension(plugin_path)

driver = webdriver.Chrome(options=chrome_options)
driver.get('https://httpbin.org/ip')
print(driver.page_source)

driver.quit()
os.remove(plugin_path)  # Удаление временного файла

Способ 2: Firefox с авторизацией (проще)

Firefox позволяет передавать credentials через настройки профиля:

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

PROXY_HOST = "123.45.67.89"
PROXY_PORT = 8080
PROXY_USER = "username"
PROXY_PASS = "password"

firefox_options = Options()

firefox_options.set_preference("network.proxy.type", 1)
firefox_options.set_preference("network.proxy.http", PROXY_HOST)
firefox_options.set_preference("network.proxy.http_port", PROXY_PORT)
firefox_options.set_preference("network.proxy.ssl", PROXY_HOST)
firefox_options.set_preference("network.proxy.ssl_port", PROXY_PORT)

# Авторизация (работает не всегда, зависит от версии Firefox)
firefox_options.set_preference("network.proxy.username", PROXY_USER)
firefox_options.set_preference("network.proxy.password", PROXY_PASS)

# Отключение запроса авторизации
firefox_options.set_preference("network.automatic-ntlm-auth.trusted-uris", PROXY_HOST)

driver = webdriver.Firefox(options=firefox_options)
driver.get('https://httpbin.org/ip')
print(driver.page_source)
driver.quit()

Примечание: Если ваш прокси-провайдер поддерживает whitelist IP, проще добавить IP вашего сервера в белый список и использовать прокси без авторизации.

Ротация прокси в Selenium

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

Ротация на уровне кода (создание нового драйвера)

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

# Список прокси
PROXY_LIST = [
    "123.45.67.89:8080",
    "98.76.54.32:8080",
    "11.22.33.44:8080",
]

def create_driver_with_proxy(proxy):
    """Создание драйвера с указанным прокси"""
    chrome_options = Options()
    chrome_options.add_argument(f'--proxy-server=http://{proxy}')
    chrome_options.add_argument('--no-sandbox')
    return webdriver.Chrome(options=chrome_options)

# Парсинг с ротацией
urls_to_parse = [
    'https://example.com/page1',
    'https://example.com/page2',
    'https://example.com/page3',
]

for url in urls_to_parse:
    # Выбираем случайный прокси
    current_proxy = random.choice(PROXY_LIST)
    
    # Создаём новый драйвер с прокси
    driver = create_driver_with_proxy(current_proxy)
    
    try:
        driver.get(url)
        # Ваша логика парсинга
        print(f"Parsed {url} via {current_proxy}")
        print(driver.title)
    except Exception as e:
        print(f"Error with {current_proxy}: {e}")
    finally:
        driver.quit()  # Важно закрывать драйвер

Использование rotating прокси (проще)

Многие прокси-провайдеры предоставляют rotating endpoint — один URL, который автоматически меняет IP при каждом запросе или через определённые интервалы. Это упрощает код:

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

# Rotating прокси endpoint (IP меняется автоматически)
ROTATING_PROXY = "rotating.proxycove.com:8080"

chrome_options = Options()
chrome_options.add_argument(f'--proxy-server=http://{ROTATING_PROXY}')

driver = webdriver.Chrome(options=chrome_options)

# Каждый запрос будет с нового IP
urls = ['https://httpbin.org/ip'] * 5

for url in urls:
    driver.get(url)
    print(driver.find_element("tag name", "body").text)
    # Каждый вывод покажет разный IP

driver.quit()

Рекомендация: Для больших проектов используйте rotating прокси — это экономит ресурсы (не нужно пересоздавать драйвер) и упрощает код. Резидентные прокси обычно поддерживают ротацию из коробки.

Типичные ошибки и их решение

Ошибка: "ERR_PROXY_CONNECTION_FAILED"

Причина: Selenium не может подключиться к прокси-серверу.

Решение:

  • Проверьте правильность IP и порта прокси
  • Убедитесь, что прокси активен (проверьте через curl: curl -x http://123.45.67.89:8080 https://httpbin.org/ip)
  • Проверьте firewall — возможно, исходящие соединения к прокси заблокированы
  • Если используете авторизацию, проверьте правильность логина/пароля

Ошибка: "ERR_TUNNEL_CONNECTION_FAILED"

Причина: Проблема с HTTPS-соединением через прокси.

Решение:

  • Убедитесь, что прокси поддерживает HTTPS (CONNECT метод)
  • Для HTTPS-сайтов используйте HTTPS прокси или SOCKS5
  • Добавьте опцию игнорирования SSL-ошибок: chrome_options.add_argument('--ignore-certificate-errors')

Ошибка: Прокси работает, но сайт детектирует бота

Причина: Сайт использует продвинутые методы детектирования (fingerprinting, анализ поведения).

Решение:

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

chrome_options = Options()
chrome_options.add_argument(f'--proxy-server=http://{PROXY}')

# Отключение webdriver-флага (основной признак автоматизации)
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome(options=chrome_options)

# Удаление navigator.webdriver
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
    'source': '''
        Object.defineProperty(navigator, 'webdriver', {
            get: () => undefined
        })
    '''
})

driver.get('https://bot.sannysoft.com/')  # Сайт для проверки детектирования

Дополнительно рекомендуется использовать библиотеку undetected-chromedriver, которая автоматически применяет множество антидетект-техник.

Проблема: Медленная загрузка страниц через прокси

Причина: Прокси перегружен или находится географически далеко.

Решение:

  • Выбирайте прокси ближе к целевому серверу (например, для парсинга US-сайтов используйте US-прокси)
  • Используйте прокси дата-центров для задач, где скорость важнее анонимности
  • Настройте таймауты в Selenium для избежания зависаний:
from selenium.webdriver.support.ui import WebDriverWait

driver.set_page_load_timeout(30)  # Максимум 30 секунд на загрузку
driver.implicitly_wait(10)  # Неявное ожидание элементов

Best practices при работе с прокси

1. Используйте пулы прокси
Не полагайтесь на один прокси-сервер. Создайте пул из 10-50 прокси и ротируйте их. Если один прокси забанят, парсинг продолжится с другого.

2. Добавляйте случайные задержки
Даже с прокси слишком быстрые запросы выглядят подозрительно. Добавляйте случайные задержки 2-5 секунд между запросами:

import time
import random

for url in urls:
    driver.get(url)
    # Парсинг...
    time.sleep(random.uniform(2, 5))  # Случайная задержка 2-5 сек

3. Мониторьте качество прокси
Проверяйте прокси перед использованием. Исключайте из пула те, которые не отвечают или возвращают ошибки:

import requests

def check_proxy(proxy):
    """Проверка работоспособности прокси"""
    try:
        response = requests.get(
            'https://httpbin.org/ip',
            proxies={'http': f'http://{proxy}', 'https': f'http://{proxy}'},
            timeout=10
        )
        return response.status_code == 200
    except:
        return False

# Фильтрация рабочих прокси
working_proxies = [p for p in PROXY_LIST if check_proxy(p)]
print(f"Working proxies: {len(working_proxies)}/{len(PROXY_LIST)}")

4. Используйте headless режим с осторожностью
Headless браузеры легче детектировать. Для сложных сайтов запускайте браузер в обычном режиме или используйте --window-size вместо --headless.

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

6. Соблюдайте robots.txt и rate limits
Даже с прокси уважайте правила сайта. Агрессивный парсинг может привести к блокировке целых подсетей прокси, что навредит другим пользователям.

Заключение

Правильная настройка прокси в Selenium WebDriver — это фундамент стабильного парсинга и автоматизации. Мы разобрали все основные способы интеграции прокси для Chrome и Firefox, работу с авторизацией, ротацию IP-адресов и решение типичных проблем. Главное — выбрать подходящий тип прокси под вашу задачу: для простого парсинга достаточно прокси дата-центров, а для работы с защищёнными платформами необходимы резидентные или мобильные прокси.

Помните о best practices: используйте пулы прокси, добавляйте случайные задержки, мониторьте качество соединений и применяйте антидетект-техники. Это увеличит стабильность ваших скриптов и снизит риск блокировок в десятки раз.

Если вы планируете автоматизацию парсинга с высокими требованиями к анонимности и обходу антибот-систем, рекомендуем попробовать резидентные прокси — они обеспечивают максимальную стабильность работы с любыми сайтами, включая социальные сети, e-commerce платформы и сервисы с продвинутой защитой. Для задач, где критична скорость обработки больших объёмов данных, прокси дата-центров станут оптимальным выбором по соотношению цена-производительность.