Реферальная программа
Разработка

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

Настройте ротационные прокси в Selenium WebDriver для Chrome и Firefox.

Selenium WebDriver автоматизирует браузеры для тестирования и скрапинга. Настройте SotaProxy в ChromeOptions или FirefoxProfile браузера перед запуском.

Руководство по настройке

1

Chrome с Python

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

options = Options()
options.add_argument('--proxy-server=http://proxy.sotaproxy.com:10000')

driver = webdriver.Chrome(options=options)

# Handle authentication via extension or CDP
driver.get("https://httpbin.org/ip")
print(driver.page_source)
driver.quit()

Chrome не поддерживает аутентификацию прокси через аргументы командной строки. Для прокси с аутентификацией используйте расширение Chrome или подход через Chrome DevTools Protocol (CDP) ниже.

2

Chrome с аутентификацией через CDP (Python)

python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import json, base64

PROXY_HOST = "proxy.sotaproxy.com"
PROXY_PORT = 10000
PROXY_USER = "YOUR_USERNAME"
PROXY_PASS = "YOUR_PASSWORD"

# Create auth extension
manifest = {
    "version": "1.0.0",
    "manifest_version": 2,
    "name": "Proxy Auth",
    "permissions": ["proxy", "webRequest", "webRequestBlocking", "<all_urls>"],
    "background": {"scripts": ["background.js"]},
}
background_js = f"""
var config = {{
    mode: "fixed_servers",
    rules: {{
        singleProxy: {{
            scheme: "http",
            host: "{PROXY_HOST}",
            port: {PROXY_PORT},
        }},
    }}
}};
chrome.proxy.settings.set({{value: config, scope: "regular"}}, function(){{}});

chrome.webRequest.onAuthRequired.addListener(
    function(details) {{
        return {{authCredentials: {{username: "{PROXY_USER}", password: "{PROXY_PASS}"}}}};
    }},
    {{urls: ["<all_urls>"]}},
    ["blocking"]
);
"""

import zipfile, os
ext_path = "/tmp/proxy_auth.zip"
with zipfile.ZipFile(ext_path, 'w') as zp:
    zp.writestr("manifest.json", json.dumps(manifest))
    zp.writestr("background.js", background_js)

options = Options()
options.add_extension(ext_path)
driver = webdriver.Chrome(options=options)
driver.get("https://httpbin.org/ip")
print(driver.page_source)

Chrome требует расширение для обработки аутентификации прокси. Здесь создаётся минимальное расширение в памяти.

3

Firefox с Python

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

options = Options()
options.set_preference("network.proxy.type", 1)
options.set_preference("network.proxy.http", "proxy.sotaproxy.com")
options.set_preference("network.proxy.http_port", 10000)
options.set_preference("network.proxy.ssl", "proxy.sotaproxy.com")
options.set_preference("network.proxy.ssl_port", 10000)

driver = webdriver.Firefox(options=options)

# Firefox prompts for credentials - handle via alert
driver.get("https://httpbin.org/ip")

Firefox поддерживает настройки прокси нативно через параметры профиля. Обработайте всплывающее окно аутентификации через driver.switch_to.alert.

Автоматизируй через SotaProxy API

Всё описанное выше работает без открытия дашборда. С API-ключом Selenium может получать свежие данные прокси, покупать новые и продлевать истекающие - прямо из кода.

python
import requests

API = "https://api.sotaproxy.com/api/v1"
H = {"Authorization": "Bearer sk_live_your_key"}

# Every active proxy on your account - no copy-pasting credentials
proxies = requests.get(f"{API}/proxies", headers=H).json()["proxies"]
p = proxies[0]
proxy_url = f"http://{p['login']}:{p['password']}@{p['ip']}:{p['portHttp']}"

# Buy more when you scale (price-check first with POST /quote)
requests.post(
    f"{API}/orders",
    headers={**H, "Idempotency-Key": "my-unique-order-id"},
    json={"product": "ipv4", "countryId": 565, "periodId": "1m", "quantity": 5},
)
Документация API

Дыра с авторизацией в Selenium

Драйверы Chrome и Firefox принимают адрес прокси, но ни один из них не принимает логин и пароль через стандартную возможность. Это главный источник путаницы на этой странице:

Ротация резидентки
login:password@proxy.sotaproxy.com:10000
Привязка к стране
login_c_US:password@proxy.sotaproxy.com:10000
Липкая на 15 минут
login_c_US_s_42_ttl_15m:password@proxy.sotaproxy.com:10000
Статический адрес (ISP, датацентр)
login:password@ваш-ip:50100, SOCKS5 на 50101

Выхода два: поднять selenium-wire, который умеет прокси с авторизацией из коробки, или собрать маленькое расширение Chrome, которое подставляет учётные данные. Оба показаны ниже.

selenium-wire или расширение, которое вы соберёте сами

selenium-wire это короткая дорога, и он принимает логин с суффиксами ровно в том виде, в каком мы его выдаём:

Python: selenium-wire с авторизованным прокси

from seleniumwire import webdriver

login = "login_c_US_s_3_ttl_1h"
opts = {
    "proxy": {
        "http": f"http://{login}:password@proxy.sotaproxy.com:10000",
        "https": f"http://{login}:password@proxy.sotaproxy.com:10000",
        "no_proxy": "localhost,127.0.0.1",
    }
}
driver = webdriver.Chrome(seleniumwire_options=opts)
driver.get("https://api.ipify.org")
  • Чтобы сменить адрес, поменяйте номер сессии и перезапустите драйвер. Подменить прокси под работающей сессией Chrome невозможно.
  • Оставляйте no_proxy для localhost, иначе драйвер полезет к chromedriver через прокси и сессия просто не стартует.
  • selenium-wire перехватывает трафик на стороне Python, и это стоит пропускной способности. Для чистого скрапинга requests или Playwright будут в разы быстрее.
  • Если добавить зависимость нельзя, соберите расширение из двух файлов с фоновым скриптом, отвечающим на запрос авторизации, и подключите его через add_extension.

Особенности Selenium

Учётные данные во флаге --proxy-server игнорируются

Ровно как в Puppeteer. Chrome берёт хост и порт и больше ничего, а затем встречает каждый запрос ответом 407.

Всплывает окно с запросом пароля

Когда Chrome не может ответить на запрос авторизации прокси, он показывает системный диалог, по которому Selenium не может кликнуть. Этот диалог симптом, а не причина.

Прокси действует на весь браузер

Адресов на вкладку не бывает. Один драйвер это один адрес, поэтому параллельные личности означают параллельные драйверы.

Забытые драйверы держат сессии открытыми

Всегда закрывайте драйвер. Брошенные процессы Chrome сохраняют соединение с точкой входа и тихо съедают вашу параллельность.

Заметки и советы

  • Для конвейеров автотестирования Playwright проще настроить с прокси с аутентификацией, чем Selenium Chrome.
  • Сетапы Selenium Grid могут настраивать прокси на уровне ноды - смотрите документацию по конфигурации вашего Grid.

FAQ

Почему Chrome не поддерживает аутентификацию прокси в Selenium?

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

Можно ли использовать SotaProxy с Selenium Grid?

Да. Настройте прокси в capabilities браузера при регистрации нод или передавайте настройки прокси на тест в desired capabilities.

Получи учётные данные прокси

Зарегистрируйся, пополни баланс и скопируй эндпоинт в Selenium. Займёт менее 5 минут.

Начать