Логотип «2Captcha»Перейти на главную страницу
Туториалы по обходу капчи

Эта статья была полезной?

Как использовать Browser API вместе с решением капч

Browser API — это браузер, который работает на стороне сервиса. Вы не запускаете Chrome у себя, а подключаетесь к готовому и управляете им из своего кода: те же переходы, клики и ожидания селекторов. Прокси, отпечаток браузера и сессии сервис берёт на себя, капчи он тоже решает сам — и это поведение можно настроить.

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

Какие капчи браузер решает сам

Решение капч включено по умолчанию, отдельно включать его не нужно. В фоне браузер проходит такие проверки:

  • reCAPTCHA v2
  • reCAPTCHA v2 Invisible
  • reCAPTCHA v2 Callback
  • reCAPTCHA v2 Enterprise
  • MTCaptcha
  • Cloudflare Turnstile
  • Cloudflare Challenge

Последние две — разные случаи. Turnstile это виджет на странице сайта, а Challenge — отдельная страница проверки, которая открывается вместо сайта целиком. Вручную второй случай сложнее, браузер проходит оба одинаково.

Список пополняется: сервис добавляет новые проверки.

Если нужной капчи в списке нет

Browser API остаётся браузером, и всё остальное работает как раньше. Капчу, которой в списке нет, вы решаете обычным способом: находите параметры, отправляете задачу через SDK или напрямую в API, получаете токен и подставляете в страницу. Код при этом не меняется — он выполняется в облачном браузере так же, как выполнялся бы в браузере на вашем компьютере.

То есть Browser API не заменяет методы решения, а берёт на себя часть работы.

Что понадобится

  • Python 3.7 или выше
  • Аккаунт RuCaptcha с пополненным балансом
  • Аккаунт браузера, созданный в панели управления Browser API
  • Оплаченный трафик прокси

Библиотеки ставятся так:

bash Copy
pip install playwright requests
playwright install chromium

Chromium нужен самому Playwright, работать он будет с браузером на сервере.

Шаг 1. Создание аккаунта браузера

Аккаунт браузера — это отдельная учётная запись, а не ваш API-ключ. Создаётся в панели управления Browser API на вкладке «Аккаунты»: задаёте название, при желании свой пароль, выбираете режим прокси. Если пароль не задавать, он сгенерируется и будет виден в карточке.

Режимов прокси три:

  • Прокси в URL подключения — свой прокси передаётся прямо в адресе;
  • Платный прокси RuCaptcha — выбираете аккаунт прокси, страну и время жизни IP от 0 до 120 минут, где 0 означает новый IP на каждый запрос;
  • Свой прокси — данные хранятся в настройках аккаунта.

После создания в карточке появляются логин, пароль, данные прокси и API-ключ. Логин с паролем нужны для подключения, API-ключ — для методов решения капч и для управления аккаунтами из кода.

На один аккаунт приходится до 1000 профилей, самих аккаунтов может быть до 10.

Шаг 2. Получение адреса подключения

Адрес можно взять двумя способами.

Первый — скопировать в панели управления: вкладка «Профили», строка «URL подключения (CDP/WebSocket)». Годится, чтобы попробовать один раз.

Второй — запросить у API. Так лучше для скрипта: логин, пароль и профиль в коде не хранятся, достаточно API-ключа и номера аккаунта. Номер виден в карточке аккаунта, в строке «ID аккаунта».

python Copy
import os
import requests

API_KEY = os.getenv("APIKEY_RUCAPTCHA", "ВАШ_API_КЛЮЧ")
ACCOUNT_ID = 8953

response = requests.post(
    "https://api.2captcha.com/browser/connection",
    json={"key": API_KEY, "accountId": ACCOUNT_ID},
)
cdp_url = response.json()["connectionUri"]

print("Адрес подключения получен")

В ответе приходит готовая строка вида:

Copy
ws://ЛОГИН-zone-scraping_browser-country-ru-pid-ПРОФИЛЬ:ПАРОЛЬ@cb.2captcha.com:9222

Адрес сервера один для обеих версий сервиса — cb.2captcha.com, даже если вы работаете через RuCaptcha.

Можно добавить в запрос profileId и указать конкретный профиль. Если профиля с таким идентификатором нет, он создастся сразу и займёт место в лимите.

Если менять настройки профиля, изменения применяются в течение десяти минут. Скрипт, запущенный сразу, ещё может работать со старыми.

Шаг 3. Подключение из Playwright

Вместо запуска браузера — подключение к готовому по адресу из предыдущего шага. Работать нужно в контексте, который на сервере уже создан.

python Copy
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.connect_over_cdp(cdp_url)
    context = browser.contexts[0]
    page = context.new_page()

    page.goto("https://mysite.com/protected-page")
    page.wait_for_load_state("networkidle")

    print("Заголовок:", page.title())
    browser.close()

Отличий от обычного Playwright три. Вместо launch() вызывается connect_over_cdp(). Контекст не создаётся заново, а берётся готовый через browser.contexts[0]. И browser.close() завершает не процесс на вашем компьютере, а сессию на сервере.

Селекторы, ожидания и заполнение форм остаются прежними.

Шаг 4. Управление решением капч

Решение включено по умолчанию, но его можно отключить или переключить в другой режим. Настройки передаются не отдельным параметром, а прямо в адресе — в той его части, что стоит до двоеточия с паролем. Это единственный случай, когда адрес приходится собирать самому: метод из Шага 2 таких полей не принимает.

  • -nocaptcha — отключает решение капч. Пишется без значения.
  • -clickcaptcha — включает решение reCAPTCHA нажатием. Тоже без значения, вместе с -nocaptcha не используется.
  • -dt-УСТРОЙСТВО — тип устройства. По умолчанию windows, можно передать -dt-android.

Порядок частей адреса задан жёстко. Все три идут сразу после -pid-ПРОФИЛЬ, а -proxy- — последним, перед паролем:

Copy
ЛОГИН-zone-scraping_browser-country-СТРАНА-pid-ПРОФИЛЬ-dt-УСТРОЙСТВО-clickcaptcha-proxy-ПРОКСИ

Отключить решение капч выглядит так:

python Copy
LOGIN = "ВАШ_ЛОГИН"
PASSWORD = "ВАШ_ПАРОЛЬ"
PROFILE = "ВАШ_ПРОФИЛЬ"

username = f"{LOGIN}-zone-scraping_browser-country-ru-pid-{PROFILE}-nocaptcha"
CDP_URL = f"ws://{username}:{PASSWORD}@cb.2captcha.com:9222"

Важное ограничение: эти три настройки работают только тогда, когда вы собираете адрес сами. В готовом адресе из панели управления их нет, и метод POST /browser/connection такие поля не принимает. Хотите управлять решением капч — собирайте адрес вручную.

Шаг 5. Передача своего прокси в адресе

Если в аккаунте выбран режим «Прокси в URL подключения», адрес прокси кодируется в base64url и подставляется после -proxy-.

python Copy
import base64

proxy_url = "http://ЛОГИН:ПАРОЛЬ@proxy.example.com:3128"
encoded = base64.urlsafe_b64encode(proxy_url.encode()).decode().rstrip("=")

username = f"{LOGIN}-zone-scraping_browser-country-ru-pid-{PROFILE}-proxy-{encoded}"
CDP_URL = f"ws://{username}:{PASSWORD}@cb.2captcha.com:9222"

В двух других режимах прокси берётся из настроек аккаунта, и в адресе его быть не должно.

Управление аккаунтами и профилями из кода

Аккаунты и профили можно создавать не только руками. У Browser API есть свои методы на https://api.2captcha.com, вход по обычному API-ключу в параметре key. Запросы GET принимают параметры в строке, POST, PUT и DELETE — тело JSON.

Метод Что делает
GET /browser Состояние аккаунта: доступный и израсходованный трафик, число логинов и профилей, наличие прокси
GET /browser/accounts Список логинов браузера
POST /browser/accounts Создание логина, в том числе со своим прокси
PUT /browser/accounts Изменение логина
DELETE /browser/accounts Удаление логина
GET /browser/profiles Список профилей выбранного аккаунта
POST /browser/profiles Создание или изменение профиля
DELETE /browser/profiles Удаление профиля
GET /browser/proxy_accounts Список аккаунтов прокси
POST /browser/connection Готовый адрес подключения для логина или профиля
bash Copy
curl "https://api.2captcha.com/browser?key=ВАШ_API_КЛЮЧ"

Метод POST /browser/connection возвращает готовую строку connectionUri. Если указать новый идентификатор профиля, профиль создастся сразу и займёт место в лимите.

При превышении лимита аккаунтов создание нового отклоняется с ошибкой ERROR_MAX_ACCOUNTS.

Полный рабочий пример (Python)

python Copy
import os

import requests
from playwright.sync_api import sync_playwright

API_KEY = os.getenv("APIKEY_RUCAPTCHA", "ВАШ_API_КЛЮЧ")
ACCOUNT_ID = int(os.getenv("BROWSER_ACCOUNT_ID", "8953"))

TARGET_URL = "https://mysite.com/protected-page"


def get_cdp_url():
    response = requests.post(
        "https://api.2captcha.com/browser/connection",
        json={"key": API_KEY, "accountId": ACCOUNT_ID},
        timeout=30,
    )
    data = response.json()

    if "connectionUri" not in data:
        raise RuntimeError(f"Адрес подключения не получен: {data}")

    return data["connectionUri"]


def open_protected_page():
    cdp_url = get_cdp_url()

    with sync_playwright() as p:
        browser = p.chromium.connect_over_cdp(cdp_url)

        try:
            context = browser.contexts[0]
            page = context.new_page()

            page.goto(TARGET_URL)
            page.wait_for_load_state("networkidle")

            print("Заголовок:", page.title())
            print("Адрес после загрузки:", page.url)

        except Exception as e:
            print(f"Ошибка: {e}")
        finally:
            browser.close()


if __name__ == "__main__":
    open_protected_page()

Решение частых проблем

  • Подключение не устанавливается. Логин и пароль берите из карточки аккаунта браузера: это не API-ключ, а отдельная пара. И проверьте, что профиль в адресе существует.
  • Настройки решения капч не действуют. В готовом адресе из панели управления их нет — соберите адрес сами, как показано в Шаге 4.
  • Изменения применились не сразу. Новые настройки профиля вступают в силу в течение десяти минут.
  • Скрипт останавливается на browser.new_context(). Контекст на сервере уже создан, берите его через browser.contexts[0].
  • Страница не открылась с первого раза. При блокировке сервис сам повторяет запрос с чистым IP и новым отпечатком браузера, прежде чем вернуть ошибку. Если ошибка всё же пришла, смените страну или режим прокси.

Заключение

Browser API берёт на себя часть работы: перечисленные выше проверки браузер проходит сам, и вызывать для них методы решения не нужно. Список пополняется.

Поведение настраивается. Решение включено по умолчанию, -nocaptcha его отключает, -clickcaptcha переводит reCAPTCHA в режим решения нажатием. Но работают эти настройки только при сборке адреса вручную — в готовом адресе из панели управления их нет.

Перейти со своего Playwright стоит одной строки: launch() меняется на connect_over_cdp(), контекст берётся готовым. Селекторы и логика скрипта не трогаются.

Полезные ссылки