# Настройка прокси Patchright: запуск, контексты, аутентификация и Docker

Patchright устраняет утечки CDP, которые выявляют Playwright до запуска браузера. Он не затрагивает репутацию вашего IP — и его рекомендуемая скрытая настройка тихо изменяет способ ротации прокси.

Patchright — это исправленная, незамеченная сборка Playwright, которая работает как замена: измените импорт, оставьте код. Патчи применяются **до запуска процесса браузера** — они удаляют флаги автоматизации и вызовы Chrome DevTools Protocol, которые позволяют сайту идентифицировать сессию Playwright в первые несколько миллисекунд. Они не затрагивают сеть. Каждый вопрос о прокси Patchright сводится к этому разделению и к одной детали, которую README скрывает: настройка, рекомендованная проектом для максимальной скрытности, — это постоянный контекст, который тихо изменяет способ ротации выходов. Это руководство, ориентированное на прокси — запуск против контекста, аутентифицированные шлюзы, Docker и честный отчет о потолке.

## Установка и прокси по умолчанию

Patchright поставляется для Python, Node и .NET и патчит только Chromium — Firefox и WebKit явно не поддерживаются. Установите его и загрузите настоящий Google Chrome, а не встроенный Chromium, который проект рекомендует для скрытности:

```bash
pip install patchright
patchright install chrome
# Node: npm i patchright && npx patchright install chrome
```

API прокси — это Playwright, без изменений, потому что прокси — это одна из немногих вещей, которые Patchright намеренно оставляет без изменений. Учетные данные помещаются в специальные поля, никогда не внутри URL сервера — поэтому аутентифицированные прокси здесь не нуждаются в расширении, в отличие от Selenium или чистого Puppeteer:

```python
from patchright.sync_api import sync_playwright

PROXY = {
    "server": "http://residentialpremium.quantumproxies.io:8080",
    "username": "USER",
    "password": "PASS",
}

with sync_playwright() as p:
    browser = p.chromium.launch(channel="chrome", proxy=PROXY)
    page = browser.new_page()
    page.goto("https://httpbin.org/ip")
    print(page.text_content("body"))   # the exit IP
    browser.close()
```

Это весь ответ на вопрос "поддерживает ли Patchright прокси": да, идентично оригинальному Playwright, включая список `bypass` и особенность Chromium, что адреса loopback полностью обходят прокси — так что тестирование на локальном макетном сервере всегда будет выглядеть так, будто прокси игнорируется. Если вы новичок в базовой модели, наше [руководство по интеграции прокси Playwright](https://quantumproxies.io/blog/playwright-proxy-integration) охватывает базовое поведение, а [карта прокси антидетект-фреймворков](https://quantumproxies.io/blog/anti-detect-frameworks-authenticated-proxies-map) сравнивает, какие стеки принимают учетные данные нативно.

## Прокси для каждого контекста и глобальный заглушка

Контексты — это дешевая единица ротации: отдельные куки, хранилище и кэш, создаваемые за миллисекунды вместо секунд, которые стоят запуск браузера. Каждый из них принимает свою собственную опцию `proxy`, так что один процесс может удерживать идентичность США и идентичность Германии одновременно. Есть одна задокументированная особенность Playwright, которая сбивает людей с толку здесь — браузер должен быть запущен с глобальным прокси, чтобы прокси для каждого контекста работали на Chromium. Если каждый контекст переопределяет его, глобальное значение никогда не используется и может быть любой строкой-заполнителем:

```js
const { chromium } = require('patchright');

(async () => {
  // the global proxy is never used — it only enables the per-context option
  const browser = await chromium.launch({
    channel: 'chrome',
    proxy: { server: 'http://per-context' },
  });

  for (const job of jobs) {
    const context = await browser.newContext({
      proxy: {
        server: 'http://residentialpremium.quantumproxies.io:8080',
        username: 'USER-country-' + job.country,   // geo in the username
        password: 'PASS',
      },
    });
    const page = await context.newPage();
    try {
      await page.goto(job.url, { timeout: 30000 });
      // ...extract...
    } finally {
      await context.close();   // burns the cookies with the exit
    }
  }
  await browser.close();
})();
```

Указанный на ротационный шлюз, каждый контекст выходит с другого адреса в пуле из более чем 90 миллионов резидентных адресов без управления списком с вашей стороны — это то, что делают [ротационные прокси](https://quantumproxies.io/rotating-proxies) на стороне сервера. Обратите внимание, где находятся элементы управления гео и сессией в этом фрагменте: в имени пользователя, а не в пользовательском заголовке. Это имеет большее значение в Patchright, чем в обычном Playwright, потому что руководство проекта — избегать пользовательских заголовков и переопределений user-agent, поскольку внедренные значения сами по себе являются поверхностью обнаружения. Управление параметрами через имя пользователя сохраняет форму запроса браузера нетронутой.

![Два способа работать с прокси в Patchright: запустить браузер и дать каждому контексту свой прокси для быстрой ротации или использовать рекомендуемый проектом для скрытности постоянный контекст, в котором ровно один контекст и, значит, один выход на процесс. Карточка отмечает глобальную прокси-заглушку, необходимую для прокси на уровне контекста.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785776555/blog/generated/qp-b10-009-diag1.png)
*Компромисс, о котором никто не говорит: быстрая ротация живет в контекстах, максимальная скрытность — в постоянном профиле — и постоянный профиль имеет ровно один контекст.*

## Компромисс постоянного контекста

Рекомендуемая конфигурация скрытности Patchright — это не `launch()`. Это `launch_persistent_context()` с реальным каналом Chrome, каталогом пользовательских данных, без переопределения viewport и в режиме с интерфейсом — и явно без пользовательских заголовков или поддельного user-agent. Эта настройка также сохраняет любые куки разрешения, которые предоставляет вам вызов, так что решенный вызов может быть повторно использован в разных запусках. Следствие для прокси структурное: постоянный контекст *есть* контекст. Нет `newContext()`, чтобы повесить второй прокси, так что один процесс равен одной идентичности выхода.

```python
from patchright.sync_api import sync_playwright

with sync_playwright() as p:
    ctx = p.chromium.launch_persistent_context(
        user_data_dir="profiles/it-01",   # one profile per identity
        channel="chrome",
        headless=False,
        no_viewport=True,
        proxy={
            "server": "http://residentialpremium.quantumproxies.io:8080",
            "username": "USER-country-it-sid-it01-ttl-30m",   # sticky, pinned to the profile
            "password": "PASS",
        },
        # do NOT pass user_agent or extra_http_headers here
    )
    page = ctx.new_page()
    page.goto("https://example.com")
    ctx.close()
```

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

## Запуск Patchright в Docker за прокси

Контейнеризация скрытого браузера имеет две ловушки, и обе имеют последствия для прокси. Первая — это `--no-sandbox`: обычное исправление для Chrome, отказывающегося запускаться от имени root, и флаг, который антибот-вендоры с удовольствием читают. Запускайте от имени пользователя, не являющегося root. Вторая — это режим без интерфейса — проект рекомендует с интерфейсом, поэтому используйте виртуальный дисплей, а не переключатель без интерфейса:

```bash
# Dockerfile
FROM python:3.12-slim

RUN apt-get update && apt-get install -y --no-install-recommends \
      xvfb ca-certificates && rm -rf /var/lib/apt/lists/*

RUN pip install --no-cache-dir patchright \
 && patchright install --with-deps chrome

RUN useradd -m app
USER app
WORKDIR /home/app
COPY --chown=app:app scrape.py .

# headed under a virtual display: no --no-sandbox, no HeadlessChrome tell
CMD ["xvfb-run", "-a", "python", "scrape.py"]

# build & run:
#   docker build -t patchright-worker .
#   docker run --ipc=host --shm-size=1g patchright-worker
```

`--ipc=host` и увеличенный `/dev/shm` — это стандартные исправления для Chromium в Docker для предотвращения сбоев вкладок под нагрузкой, прямо из документации по контейнерам Playwright. Одна специфическая для прокси ловушка: если вы запускаете локальный реле для добавления учетных данных к SOCKS5 конечной точке, `127.0.0.1` внутри контейнера — это контейнер, а не ваш хост. Либо поместите реле в тот же контейнер, адресуйте хост явно, либо запустите реле как сайдкар в общей сети. И храните каталог профиля на томе, если вы используете постоянные контексты, иначе каждый перезапуск контейнера выбрасывает куки разрешения, которые вы заработали, потратив полосу пропускания.

## Что покрывают патчи и что они никогда не исправят

Стоит точно знать, что вы покупаете. Главный фикс Patchright — это утечка `Runtime.enable` — он запускает JavaScript в изолированных контекстах выполнения вместо включения домена, который выдает игру. Он отключает API консоли, чтобы закрыть `Console.enable` (поэтому логирование `page.on("console")` исчезает, что является реальной стоимостью, когда вы отлаживаете сбой прокси). Он переписывает флаги по умолчанию Playwright: добавляет `--disable-blink-features=AutomationControlled`, удаляет `--enable-automation`, и возвращает `--disable-popup-blocking`, `--disable-component-update`, `--disable-default-apps` и `--disable-extensions`. Он также достигает закрытых теневых корней с помощью обычных локаторов.

Читайте этот список флагов как строку расходов на полосу пропускания. Восстановление обновлений компонентов и приложений по умолчанию означает браузер, который звонит домой в фоновом режиме — через ваш измеряемый выход. Измерьте передачу сессии перед масштабированием и блокируйте типы ресурсов изображения, шрифта и медиа на контексте, чтобы снизить стоимость на страницу. Ничто из этого не касается другой стены: исправленный браузер на сгоревшем IP-адресе центра обработки данных все еще остается сгоревшим IP, и запрос отклоняется по репутации до того, как будет оценена вся эта хитрость. Проверьте адрес с помощью бесплатного [проверщика качества IP](https://quantumproxies.io/ip-checker) перед тем, как заключить, что патчи не сработали, и поместите [резидентные прокси](https://quantumproxies.io/residential-proxies) под браузер, чтобы два уровня решали разные проблемы.

![Патчи Patchright проходят проверку автоматизации, закрывая утечку Runtime.enable и переписывая флаги запуска, но сожженный выходной IP отклоняется по репутации еще до того, как все это будет прочитано. Карточка разделяет две задачи: патчи решают, что говорит браузер, а прокси решает, откуда он, судя по всему, приходит.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785776555/blog/generated/qp-b10-009-diag2.png)
*Патчи решают, что браузер говорит о себе. Прокси решают, откуда он, кажется, приходит. Исправление одного и игнорирование другого все равно заканчивается блокировкой.*

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

### Как установить прокси в Patchright?

Точно так же, как в Playwright: передайте `proxy={"server": "http://host:port", "username": "USER", "password": "PASS"}` в `chromium.launch()`, `launch_persistent_context()` или `new_context()`. Patchright не патчит слой прокси, поэтому все поведение оригинала — список обхода, исключение loopback — применяется без изменений.

### Поддерживает ли Patchright аутентификацию прокси SOCKS5?

Нет, и это ограничение Chromium, а не Patchright: у Chromium нет механизма для учетных данных SOCKS, поэтому аутентифицированные конечные точки SOCKS5 не работают. Используйте HTTP-порт того же шлюза с полями имени пользователя и пароля или аутентифицируйтесь по белому списку IP и сохраняйте схему SOCKS5 — каждый план QuantumProxies поддерживает белый список как альтернативу user:pass. Полный набор обходных решений находится в нашем [руководстве по аутентификации прокси SOCKS5 для Playwright](https://quantumproxies.io/blog/playwright-socks5-proxy-authentication), которое применяется здесь без изменений.

### Может ли Patchright использовать разные прокси для каждого контекста?

Да, если вы запустили браузер с глобальным значением прокси — даже заполнителем — потому что Chromium включает прокси для каждого контекста, когда один присутствует при запуске. Исключение — настройка постоянного контекста, которую Patchright рекомендует для скрытности: это дает вам один контекст, поэтому ротация означает отдельный процесс с собственным каталогом профиля.

### Patchright поддерживает только Chromium?

Да. Проект прямо заявляет, что патчатся только браузеры на основе Chromium; Firefox и WebKit не поддерживаются. Если вам нужна скрытность на движке Firefox с гео, полученным от выхода прокси, это другой инструмент — см. наше [руководство по прокси и geoip для Camoufox](https://quantumproxies.io/blog/camoufox-proxy-geoip).

### Продолжают ли меня блокировать с Patchright?

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

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

[Установите Patchright на чистые резидентные выходы](https://quantumproxies.io/residential-proxies)
