Продукты
Безлимитные прокси от $19/мес Ротационные прокси от $49/мес ISP прокси от $33/мес Персональные прокси от $3.50/мес UDP прокси от $5/мес Попробовать прокси
По целям
Парсинг и данные ИИ-сервисы Соцсети и мессенджеры Медиа и развлечения Все задачи →
Цены
Полная таблица цен Все 20 стран Гарантия возврата
Ресурсы
Блог MCP-сервер Инструкции по настройке Частые вопросы Для бизнеса О сервисе Партнёрская программа
Русский
English Русский

Настройка прокси в Selenium WebDriver

Подключить прокси к Selenium — одна строка: флаг Chrome или кроссбраузерный класс Proxy. Все спотыкаются о другое — об авторизацию: Chrome игнорирует логин:пароль@ в адресе прокси, а WebDriver не умеет нажимать кнопки в системном окне входа. В этом гайде — настройка на Python и Java, рабочие способы авторизации, SOCKS5 и ротация прокси по списку.

Перед настройкой: данные прокси и порты

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

Авторизация Порт HTTP Порт SOCKS5 Кому подходит
Привязка по IP
логин и пароль не нужны
8085 1085 Рекомендуемый вариант для Selenium — код авторизации не нужен вовсе
Логин / пароль
данные из личного кабинета
8080 1080 Машины с меняющимся IP — потребуется один из обходных путей ниже

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

Примеры в гайде рассчитаны на Selenium 4:

pip install -U selenium

Отдельно устанавливать ChromeDriver в современных версиях обычно не нужно: начиная с Selenium 4.6 в комплекте идёт Selenium Manager, который подбирает драйвер под ваш браузер автоматически.

Прокси в Chrome

Самый короткий путь — аргумент --proxy-server (тот же флаг работает в Edge и других Chromium-браузерах):

Python

from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument("--proxy-server=http://123.45.67.89:8085") driver = webdriver.Chrome(options=options) driver.get("https://api.ipify.org") print(driver.find_element("tag name", "body").text) # выведет IP прокси driver.quit()

Java

import org.openqa.selenium.Proxy; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; Proxy proxy = new Proxy(); proxy.setHttpProxy("123.45.67.89:8085"); proxy.setSslProxy("123.45.67.89:8085"); ChromeOptions options = new ChromeOptions(); options.setProxy(proxy); WebDriver driver = new ChromeDriver(options);

Python, класс Proxy

Тот же кроссбраузерный класс Proxy доступен и в Python — этот способ соответствует текущей документации Selenium по browser options:

from selenium import webdriver from selenium.webdriver.common.proxy import Proxy, ProxyType proxy = Proxy() proxy.proxy_type = ProxyType.MANUAL proxy.http_proxy = "123.45.67.89:8085" proxy.ssl_proxy = "123.45.67.89:8085" options = webdriver.ChromeOptions() options.proxy = proxy driver = webdriver.Chrome(options=options)

При работе с классом Proxy заполняйте оба поля — httpProxy и sslProxy — одним и тем же адресом. sslProxy — это не другой тип прокси, а прокси для https://-адресов; почти весь современный веб — HTTPS, так что пустое поле отправит почти весь трафик мимо прокси.

Прокси в Firefox

Тот же класс Proxy работает во всех браузерах — в Python он прикрепляется к объекту options:

from selenium import webdriver from selenium.webdriver.common.proxy import Proxy, ProxyType proxy = Proxy() proxy.proxy_type = ProxyType.MANUAL proxy.http_proxy = "123.45.67.89:8085" proxy.ssl_proxy = "123.45.67.89:8085" options = webdriver.FirefoxOptions() options.proxy = proxy driver = webdriver.Firefox(options=options) driver.get("https://api.ipify.org") print(driver.find_element("tag name", "body").text) # выведет IP прокси driver.quit()

Авторизация прокси: что реально работает

Классическая боль Selenium: --proxy-server=http://логин:пароль@ip:8080 выглядит правильно, но не работает — Chrome игнорирует данные для входа, встроенные в адрес ручного прокси, и показывает браузерное окно HTTP-аутентификации. Это окно не является DOM-элементом страницы, поэтому find_element() и обычные действия Selenium до него не дотягиваются. Отдельных полей логина и пароля для HTTP- и HTTPS-прокси стандартная proxy capability тоже не даёт — для авторизации нужен другой механизм. Три рабочих варианта — в порядке, в котором мы бы их рекомендовали:

1. Привязка по IP (порт 8085) — авторизация не нужна вовсе. Добавьте IP машины в привязку в личном кабинете и используйте обычную настройку из секций выше. Это стандартный подход для парсинга и тестовых ферм: никаких секретов в коде, работает в любом браузере и на любом языке.

2. Java: ответ на запрос авторизации через CDP. Java-биндинг Selenium 4 умеет регистрировать данные для входа в Chromium-браузерах:

import org.openqa.selenium.HasAuthentication; import org.openqa.selenium.UsernameAndPassword; ((HasAuthentication) driver) .register(UsernameAndPassword.of("ваш-логин", "ваш-пароль"));

3. Python: библиотека Selenium Wire. Она пропускает трафик через локальный промежуточный прокси и выполняет авторизацию за вас:

from seleniumwire import webdriver # pip install selenium-wire options = { "proxy": { "http": "http://ваш-логин:ваш-пароль@123.45.67.89:8080", "https": "http://ваш-логин:ваш-пароль@123.45.67.89:8080", } } driver = webdriver.Chrome(seleniumwire_options=options)

Учтите, что Selenium Wire больше активно не поддерживается, поэтому рассматривайте его как временное решение — для долгоживущих проектов привязка по IP надёжнее.

Прокси SOCKS5

Chrome принимает SOCKS5 через тот же флаг с другой схемой, а в классе Proxy для него есть отдельные поля:

from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument("--proxy-server=socks5://123.45.67.89:1085") driver = webdriver.Chrome(options=options) # или через класс Proxy (кроссбраузерно): # proxy.socks_proxy = "123.45.67.89:1085" # proxy.socks_version = 5

В Selenium API есть поля для SOCKS-учётных данных (socks_username и socks_password), но полагаться на них не стоит: Chromium авторизацию на SOCKS5 не поддерживает, а драйверы других браузеров реализуют эти поля непоследовательно. Для надёжной работы используйте порт 1085 с привязкой по IP. Для большинства задач в Selenium проще взять HTTP-прокси.

В мануалах по curl и Python requests встречается схема socks5h:// — там дополнительная «h» заставляет прокси резолвить доменные имена вместо вашей машины, чтобы DNS-запросы не уходили мимо прокси. Chrome такую схему не распознаёт, и она ему не нужна: по документации Chromium с обычной socks5:// резолвинг имён всегда выполняется на стороне прокси.

Загрузка прокси из списка и ротация

С пакетом прокси адреса никто не вписывает в код руками: выгрузите весь список из личного кабинета в файл — по одному IP:порт на строку, порядок полей и разделитель настраиваются при выгрузке — и загружайте его в начале скрипта. Важный нюанс: штатными средствами WebDriver и флагом --proxy-server прокси в уже запущенной сессии не меняется, поэтому самый простой и надёжный вариант ротации — новый driver на каждый адрес (смена без перезапуска возможна только через дополнительный слой: расширение, PAC-конфигурацию или локальный промежуточный прокси вроде Selenium Wire). С привязкой по IP (порт 8085) полный скрипт выглядит так:

from selenium import webdriver # proxies.txt — по одному адресу на строку: 123.45.67.89:8085 with open("proxies.txt") as f: proxies = [line.strip() for line in f if line.strip()] for address in proxies: options = webdriver.ChromeOptions() options.add_argument(f"--proxy-server=http://{address}") driver = None try: driver = webdriver.Chrome(options=options) driver.get("https://example.com") # ... парсим ... except Exception as error: print(f"{address}: {error}") # мёртвый прокси не остановит весь список finally: if driver is not None: driver.quit()

Если список работает на портах с логином и паролем (8080/1080), задайте их один раз константами — адреса по-прежнему берутся из файла. Сам Chrome данные для входа не примет (см. раздел про авторизацию), поэтому на Python это делается через Selenium Wire:

from seleniumwire import webdriver # pip install selenium-wire LOGIN, PASSWORD = "ваш-логин", "ваш-пароль" # proxies.txt — по одному адресу на строку: 123.45.67.89:8080 with open("proxies.txt") as f: proxies = [line.strip() for line in f if line.strip()] for address in proxies: options = {"proxy": { "http": f"http://{LOGIN}:{PASSWORD}@{address}", "https": f"http://{LOGIN}:{PASSWORD}@{address}", }} driver = webdriver.Chrome(seleniumwire_options=options) driver.get("https://example.com") # ... парсим ... driver.quit()

На Java оставьте обычный цикл ротации и один раз на каждый driver регистрируйте данные для входа через HasAuthentication (способ через CDP из раздела про авторизацию). А если список выгружен уже с логином и паролем — строки вида логин:пароль@IP:порт, формат выгрузки в личном кабинете настраивается — уберите константы и подставляйте строку как есть: f"http://{line}".

Наши пакеты серверных прокси начинаются от 100 IP, так что сам список узким местом не станет, а когда целевой сайт начнёт ограничивать запросы — обновите список по запросу и выгрузите файл заново. Если перезапуск браузера на каждый IP слишком медленный для вашей задачи, ротационные прокси переворачивают логику: в Selenium остаётся один адрес шлюза, а выходной IP меняется на каждом запросе.

Обычные настройки прокси в options передаются в Selenium Grid вместе с новой сессией и работают с RemoteWebDriver без изменений. Авторизация через HasAuthentication — отдельный случай: этот интерфейс реализуют напрямую Chromium-драйверы, а не базовый RemoteWebDriver, поэтому в Grid может понадобиться Augmenter, а узел должен поддерживать доступ к CDP или WebDriver BiDi.

Если что-то не работает

Самые частые причины: ERR_TUNNEL_CONNECTION_FAILED или ERR_PROXY_CONNECTION_FAILED обычно означают, что порт не соответствует способу авторизации (см. таблицу) — либо, на портах 8085/1085, что IP машины не добавлен в привязку; окно входа при старте значит, что прокси ждёт данные, которые браузер передать не может, — перейдите на привязку или используйте один из обходных путей; а если HTTPS-сайты идут мимо прокси, хотя HTTP работает, — заполнен httpProxy, но не sslProxy. Если дело не в этом — напишите нам в онлайн-чат прямо на этой странице, поможем подключиться.