Почему вам нужен прокси в 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 и аутентифицированных прокси вы теперь можете контролировать каждый аспект автоматизированного трафика. Добавьте ротацию и тестирование прокси — ваши скрипты станут более надёжными, устойчивыми и практически незаметными.