Настройка прокси в Selenium
Настройте ротационные прокси в Selenium WebDriver для Chrome и Firefox.
Selenium WebDriver автоматизирует браузеры для тестирования и скрапинга. Настройте SotaProxy в ChromeOptions или FirefoxProfile браузера перед запуском.
Руководство по настройке
Chrome с 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) ниже.
Chrome с аутентификацией через CDP (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 требует расширение для обработки аутентификации прокси. Здесь создаётся минимальное расширение в памяти.
Firefox с 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 может получать свежие данные прокси, покупать новые и продлевать истекающие - прямо из кода.
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},
)Дыра с авторизацией в Selenium
Драйверы Chrome и Firefox принимают адрес прокси, но ни один из них не принимает логин и пароль через стандартную возможность. Это главный источник путаницы на этой странице:
Выхода два: поднять 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 минут.
Начать