Аутентифицированные прокси в антидетект-браузерах: карта поддержки 2026 года

Chromium никогда не принимал учетные данные на SOCKS5, и у запускающего, который только передает --proxy-server, нет никого, кто бы ответил на запрос аутентификации. Вот какой фреймворк принимает user:pass, какой нуждается в помощнике, а какой является тупиком.

Аутентифицированный прокси в антидетект-браузере не работает тремя способами, и симптомы никогда не меняются: всплывающее окно учетных данных Chrome, которое невозможно закрыть, 407 на каждый запрос или страница, которая загружается идеально с вашего собственного IP. Прокси редко виноват. Chromium никогда не принимал имя пользователя и пароль на SOCKS5, и у запускающего, который только передает --proxy-server в бинарный файл, нет никого, кто бы ответил на запрос аутентификации браузера. Это карта 2026 года: какие фреймворки принимают user:pass нативно, какие нуждаются в помощнике и где дорога заканчивается.

Одна причина, три симптома

Прокси-стек Chromium имеет слот для адреса сервера SOCKS5 и не имеет слота для учетных данных. Запрос находится в трекере Chromium как проблема 40323993 уже много лет, расширение SwitchyOmega зафиксировало подтверждение команды Chrome в своей собственной проблеме #1455, а пользователи ChromeDriver, преследующие то же самое, получают указание на crbug 40829748. Исключение составляет Firefox — он аутентифицирует SOCKS5 нативно — поэтому Camoufox попадает в другую колонку по сравнению со всем остальным здесь. Если разделение протоколов для вас ново, начните с SOCKS5 против HTTP прокси.

HTTP и HTTPS прокси — это другая история: учетные данные работают, но никогда не с командной строки. Chrome отвечает на 407, поднимая запрос аутентификации, и что-то должно ответить — в обычном браузере это всплывающее окно, которое вы видите. В автоматизации это должно быть загруженное расширение, обработчик CDP, подписанный на Fetch.authRequired, или сам фреймворк. Все, что только передает флаг запуска, оставляет запрос без ответа, и это та зависшая страница, которую люди продолжают скриншотить. Половина формата учетных данных освещена в исправлении 407 proxy authentication required.

Поддержка аутентифицированных прокси в антидетект-браузерах: карта 2026 года

Три категории: учетные данные, принимаемые API, учетные данные, принимаемые только через помощника, которого вы создаете, и ограничение движка, которое никакая конфигурация не изменит.

Работает нативно с user:pass

Требуется расширение, реле или обработчик CDP

Никогда не работает: SOCKS5 с учетными данными

Трехколоночное сравнение поддержки аутентифицированных прокси: фреймворки с нативной поддержкой имени пользователя и пароля, фреймворки, требующие расширения или обработчика CDP, и SOCKS5 с учетными данными, которые никогда не работают в Chromium
Один и тот же ядро Chromium, три результата. Первая колонка — это изменение конфигурации, вторая — это этап сборки, а третья — это ограничение движка, которое вы обходите.

Обходной путь 1: используйте HTTP-эндпоинт провайдера

Это исправляет большинство обсуждаемых выше тем и ничего не стоит. Если ваш провайдер предоставляет тот же пул через HTTP и SOCKS5, укажите браузеру HTTP-шлюз, и учетные данные станут поддерживаемым параметром, а не неподдерживаемым. DNS на стороне прокси идет бесплатно: Chromium всегда передает разрешение имен HTTP-прокси. Каждый план QuantumProxies обслуживает HTTP и SOCKS5 с одного и того же шлюза на одних и тех же учетных данных, так что переключение — это изменение схемы, а не новый заказ.

# Playwright, Patchright and Camoufox all take the same proxy object.
# Swap the import line; the proxy config does not change.
from playwright.sync_api import sync_playwright   # or: from patchright.sync_api import ...

PROXY = {
    "server": "http://gate.quantumproxies.io:PORT",  # HTTP endpoint, not socks5://
    "username": "USER",
    "password": "PASS",
}

with sync_playwright() as p:
    browser = p.chromium.launch(proxy=PROXY, headless=False)
    page = browser.new_page()
    page.goto("https://httpbin.org/ip")
    print(page.inner_text("pre"))
    browser.close()

# Camoufox: same dict, plus geoip so timezone/locale/WebRTC follow the exit IP.
# pip install -U "camoufox[geoip]"
# with Camoufox(geoip=True, proxy=PROXY) as browser: ...

Обходной путь 2: добавление IP в белый список

Самый чистый ответ — удалить шаг аутентификации. С добавлением IP в белый список вы регистрируете публичный IP машины, на которой работает браузер, и шлюз авторизует его по исходному адресу — без имени пользователя, без пароля, без всплывающего окна, ничего, на что фреймворк должен ответить. Все проблемы на этой странице исчезают сразу, включая SOCKS5, потому что нет учетных данных, которые нужно передавать. Это подходит для фиксированного сервера для скрапинга или контейнера за статическим выходным IP, и неправильно для ноутбуков в меняющихся сетях. Добавление в белый список идет наряду с user:pass на каждом плане QuantumProxies, так что производство может быть добавлено в белый список, в то время как разработка сохраняет учетные данные.

Добавьте свой IP в белый список на 90M+ резидентском пуле

Обходной путь 3: сгенерированное расширение для аутентификации в Chrome или обработчик CDP

Если вам необходимо сохранить учетные данные на фреймворке Chromium, который их не принимает, что-то внутри браузера должно ответить на запрос. Первый вариант — это расширение, которое устанавливает прокси и отвечает на onAuthRequired — именно то, что SeleniumBase строит за своим флагом --proxy. В рамках Manifest V3 два разрешения, которые делают это возможным, это webRequest и webRequestAuthProvider; пропустите второе, и слушатель никогда не сработает.

// manifest.json (MV3) — webRequestAuthProvider is the one people forget
{
  "name": "proxy-auth",
  "version": "1.0",
  "manifest_version": 3,
  "permissions": ["proxy", "webRequest", "webRequestAuthProvider"],
  "host_permissions": ["<all_urls>"],
  "background": { "service_worker": "background.js" }
}

// background.js
const HOST = "gate.quantumproxies.io";
const PORT = 8080;              // your gateway port
const USER = "USER", PASS = "PASS";

chrome.proxy.settings.set({
  value: {
    mode: "fixed_servers",
    rules: { singleProxy: { scheme: "http", host: HOST, port: PORT } },
  },
  scope: "regular",
});

chrome.webRequest.onAuthRequired.addListener(
  () => ({ authCredentials: { username: USER, password: PASS } }),
  { urls: ["<all_urls>"] },
  ["blocking"],
);

Два предупреждения. Расширения не загружаются в каждой безголовой конфигурации, поэтому это часто вынуждает использовать полноэкранный режим плюс виртуальный дисплей на серверах. И поверхность расширения меняется: пользователи SeleniumBase потеряли аутентификацию прокси из-за изменения расширения Chrome 137, так что закрепите версии браузера и фреймворка.

Второй вариант пропускает расширение и отвечает на запрос через CDP. Это принятое решение в обсуждении nodriver, и порядок действий всех сбивает с толку: зарегистрируйте обработчики перед включением домена Fetch, и никогда не ожидайте внутри обработчика, иначе вы заблокируете цикл событий.

import asyncio, nodriver as uc

PROXY = "http://gate.quantumproxies.io:PORT"   # no credentials in the flag
USER, PASS = "USER", "PASS"

async def main():
    browser = await uc.start(browser_args=[f"--proxy-server={PROXY}"])
    tab = await browser.get("draft:,")

    async def on_auth(event: uc.cdp.fetch.AuthRequired):
        # fire-and-forget: awaiting here blocks every other request
        asyncio.create_task(tab.send(uc.cdp.fetch.continue_with_auth(
            request_id=event.request_id,
            auth_challenge_response=uc.cdp.fetch.AuthChallengeResponse(
                response="ProvideCredentials", username=USER, password=PASS),
        )))

    async def on_paused(event: uc.cdp.fetch.RequestPaused):
        asyncio.create_task(tab.send(uc.cdp.fetch.continue_request(request_id=event.request_id)))

    tab.add_handler(uc.cdp.fetch.RequestPaused, on_paused)
    tab.add_handler(uc.cdp.fetch.AuthRequired, on_auth)
    # enable AFTER the handlers are registered, or no event ever arrives
    await tab.send(uc.cdp.fetch.enable(handle_auth_requests=True))

    page = await browser.get("https://httpbin.org/ip")
    print(await page.get_content())

uc.loop().run_until_complete(main())
Контрольный список, сравнивающий простые исправления для аутентификации прокси, такие как использование HTTP-эндпоинта и добавление IP в белый список, с более сложными, такими как создание расширения для аутентификации или написание обработчика CDP
Порядок действий: измените эндпоинт, затем добавьте IP в белый список. Создавайте расширение, реле или хук CDP только тогда, когда ни один из них невозможен.

Обходной путь 4: локальное реле

Реле — это небольшой прокси, который вы запускаете на localhost, который общается с вышестоящим шлюзом с учетными данными и предлагает вашему фреймворку неаутентифицированный слушатель. Браузер подключается к 127.0.0.1, не видит запроса аутентификации, и проблема с учетными данными перемещается в процесс, который с ней справляется без проблем. Это единственный способ использовать SOCKS5 с учетными данными из Chromium, и то, что пользователи Camoufox сообщают, что делают. Открытые реле на GitHub принимают учетные данные вышестоящего прокси как переменные окружения. Держите слушатель привязанным к loopback — открытый прокси без аутентификации на публичном интерфейсе — это бесплатная полоса пропускания для кого-то другого. Сборка против установки освещена в инструменты реле для аутентификации SOCKS5.

# SeleniumBase UC Mode: one flag, extension generated for you
pytest test_proxy.py --uc --proxy=USER:PASS@gate.quantumproxies.io:PORT

# Relay route: credentials upstream, no auth on the local listener
SOCKS5_SERVER=gate.quantumproxies.io:PORT \
SOCKS5_USER=USER SOCKS5_PASSWORD=PASS \
  ./socks-relay.py 127.0.0.1:1080

# now every framework can use it, credentials and limitations gone
# playwright: proxy={"server": "socks5://127.0.0.1:1080"}
# nodriver:   browser_args=["--proxy-server=socks5://127.0.0.1:1080"]

Какой маршрут выбрать

Часто задаваемые вопросы

Почему Chrome не поддерживает SOCKS5 с именем пользователя и паролем?

Потому что сеть Chromium никогда не реализовывала метод аутентификации с именем пользователя и паролем SOCKS5. Запрос находится в трекере Chromium уже много лет как проблема 40323993, и команда Chrome подтвердила, что он не поддерживается в связанных темах расширений. Это не флаг, который вы пропустили: никакое сочетание аргументов командной строки не передает учетные данные SOCKS5 в Chromium, и каждый фреймворк на основе Chromium наследует это.

Какой антидетект-фреймворк имеет лучшую поддержку прокси?

Для аутентифицированных HTTP-прокси семейство Playwright — Playwright, Patchright, browser-use и Camoufox — наименее болезненно, потому что учетные данные являются параметром первого класса. Camoufox идет дальше, выравнивая часовой пояс, локаль и WebRTC с выходным IP через свою опцию GeoIP. Инструменты с приоритетом CDP, nodriver и zendriver, сильны в стелсе, но ожидают, что вы сами решите проблему аутентификации.

Ломает ли аутентифицированный прокси обход Cloudflare в UC Mode?

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

Является ли добавление IP в белый список безопаснее, чем user:pass?

Операционно это проще и устраняет целый класс отказов, поскольку ничего не должно отвечать на запрос, и учетные данные никогда не находятся в флаге запуска или списке процессов. Компромисс — это гибкость: он связывает пул с фиксированным исходным адресом, так что ноутбуки в меняющихся сетях и автоскалируемые рабочие узлы все еще нуждаются в учетных данных. Большинство команд добавляют в белый список производство и сохраняют user:pass для разработки.

Карта достаточно коротка, чтобы запомнить. Playwright и его форки принимают учетные данные; nodriver и zendriver заставляют вас создавать ответ; SeleniumBase строит его для вас и иногда ломается; SOCKS5 с учетными данными — это тупик в Chromium. Остальное — это выбор между HTTP-эндпоинтом, IP в белом списке, расширением и реле — в этом порядке, потому что это также от наименьшего к наибольшему обслуживанию.

Получите HTTP, SOCKS5 и добавление IP в белый список в одном плане