Гайд по Selenium · 2 мин чтения

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

Selenium пускает браузер через прокси буквально несколькими строками, но для прокси с аутентификацией нужно расширение или вспомогательный сервис: Chrome не принимает USER:PASS в командной строке. Показываем надёжный паттерн.

Проблема авторизации в Selenium

Прописать в Selenium прокси без авторизации — дело одной строки: добавляете --proxy-server=http://host:3128 к опциям Chrome или заполняете объект Proxy в Selenium — и всё. Как только прокси начинает требовать логин и пароль, этот простой путь ломается: Chrome не принимает учётные данные прямо в строке, а в отличие от Puppeteer или Playwright, у Selenium нет встроенного хука authenticate(), чтобы ответить на вызов 407.

Надёжное решение, одинаковое для любого языка, — крошечное расширение Chrome, которое генерируется во время запуска, несёт ваши учётные данные и отвечает на запрос авторизации прокси через API webRequest. Оно работает в headless-режиме, не требует дополнительных служб и ведёт себя одинаково в Python и Java. С s4m вы нацеливаете расширение на proxy.s4m.online:3128 (HTTP) и свои USER:PASS. Контекст смотрите на странице прокси и в руководстве по авторизации; а если на время тестов хочется обойтись без авторизации, в бесплатном списке есть открытые прокси, которые можно сразу подставить во флаг командной строки.

Прокси с авторизацией через сгенерированное расширение

Этот помощник на Python пишет одноразовое расширение Chrome с вашими учётными данными и сразу его подгружает. Перед запуском подставьте свои USER:PASS.

python
import os, zipfile, tempfile
from selenium import webdriver

HOST, PORT, USER, PASS = "proxy.s4m.online", 3128, "USER", "PASS"

manifest = '{"version":"1.0.0","manifest_version":2,"name":"s4m-proxy",'\
  '"permissions":["proxy","webRequest","webRequestBlocking","<all_urls>"],'\
  '"background":{"scripts":["bg.js"]}}'

bg = ('var c={mode:"fixed_servers",rules:{singleProxy:'
      '{scheme:"http",host:"%s",port:%d}}};'
      'chrome.proxy.settings.set({value:c,scope:"regular"},function(){});'
      'chrome.webRequest.onAuthRequired.addListener('
      'function(d){return {authCredentials:{username:"%s",password:"%s"}};},'
      '{urls:["<all_urls>"]},["blocking"]);') % (HOST, PORT, USER, PASS)

path = os.path.join(tempfile.mkdtemp(), "s4m_proxy.zip")
with zipfile.ZipFile(path, "w") as z:
    z.writestr("manifest.json", manifest)
    z.writestr("bg.js", bg)

opts = webdriver.ChromeOptions()
opts.add_extension(path)
driver = webdriver.Chrome(options=opts)
driver.get("https://api.ipify.org")
print("Exit IP:", driver.find_element("tag name", "body").text)
driver.quit()

# ----- Java (unauthenticated proxy) -----
// Proxy p = new Proxy();
// p.setHttpProxy("proxy.s4m.online:3128");
// ChromeOptions o = new ChromeOptions();
// o.setProxy(p);
// WebDriver driver = new ChromeDriver(o);

Какой подход выбрать

Всё зависит от того, нужны ли прокси учётные данные.

Без авторизации? Хватит флага

Для прокси без авторизации просто добавьте --proxy-server=http://host:3128 к ChromeOptions или заполните объект Proxy в Selenium. Больше ничего не нужно.

С авторизацией? Генерируйте расширение

Для прокси с USER:PASS подложите крошечное расширение, сгенерированное на лету, которое отвечает на onAuthRequired. Оно работает в headless-режиме и одинаково ведёт себя в разных языках.

HTTP-эндпоинт для браузеров

Берите proxy.s4m.online:3128 (HTTP). SOCKS5 с авторизацией внутри браузера работает ненадёжно, так что SOCKS5 оставьте для CLI и библиотечных клиентов.

Держите расширение закрытым

Сгенерированное расширение хранит ваши учётные данные во временном файле. Пишите его в приватный временный каталог и убирайте после прогона.

Надёжность и честные ожидания

Selenium управляет настоящим браузером — это и его сила, и его цена: он тяжелее обычного HTTP-клиента, поэтому держите сессии осмысленными и закрывайте драйверы сразу. Если вам нужен только HTML, HTTP-клиент за прокси обойдётся намного дешевле — смотрите скрапинг на requests. Selenium берите тогда, когда нужны рендеринг JavaScript или настоящее взаимодействие пользователя.

Как всегда, прокси меняет ваш IP, а не фингерпринт. Прокси s4m — дата-центровые: идеальны для функциональных тестов, мониторинга и умеренного скрапинга, но на недружественных сайтах распознаются как дата-центровые. Когда логин или белый список ждут один стабильный адрес, добавьте выделенный персональный IP. Для новых проектов присмотритесь к Playwright: его родная авторизация прокси снимает всю историю с расширением. Проверяйте точки выхода инструментами и почитайте документацию API, чтобы автоматизировать ротацию учётных данных.

FAQ

Ответы на вопросы

Почему нельзя вписать USER:PASS во флаг прокси Selenium?

Chrome игнорирует учётные данные во флаге --proxy-server и вместо этого показывает системное окно авторизации, на которое headless-браузер ответить не может. Надёжный выход — небольшое расширение Chrome, сгенерированное на лету, которое отвечает на onAuthRequired вашим логином и паролем.

Есть ли способ проще для прокси без авторизации?

Да. Без учётных данных достаточно добавить --proxy-server=http://host:3128 к ChromeOptions или заполнить объект Proxy в Selenium на Java. Расширение нужно только тогда, когда прокси требует USER:PASS.

Что брать с Selenium — SOCKS5 или HTTP?

Для браузеров берите HTTP-эндпоинт на порту 3128. SOCKS5 с авторизацией в браузере работает ненадёжно; SOCKS5 оставьте для командной строки и библиотечных клиентов.

С Playwright будет проще?

Часто да. Playwright принимает учётные данные прокси напрямую в своём объекте proxy, так что расширение не нужно вовсе. Но Selenium остаётся правильным выбором, если проект уже на нём построен.

Гоняйте браузеры через прокси

Дата-центровые прокси с авторизацией на proxy.s4m.online, готовые к Selenium через сгенерированное расширение. Оплата за трафик, плюс опция выделенного IP для стабильных логинов.

Эту страницу нашли по запросу

Реальные поисковые фразы, на которые отвечает эта страница — по ссылкам откроются материалы, раскрывающие тему глубже.