Эта статья была полезной?
Как использовать 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
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
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("Адрес подключения получен")
В ответе приходит готовая строка вида:
ws://ЛОГИН-zone-scraping_browser-country-ru-pid-ПРОФИЛЬ:ПАРОЛЬ@cb.2captcha.com:9222
Адрес сервера один для обеих версий сервиса — cb.2captcha.com, даже если вы работаете через RuCaptcha.
Можно добавить в запрос profileId и указать конкретный профиль. Если профиля с таким идентификатором нет, он создастся сразу и займёт место в лимите.
Если менять настройки профиля, изменения применяются в течение десяти минут. Скрипт, запущенный сразу, ещё может работать со старыми.
Шаг 3. Подключение из Playwright
Вместо запуска браузера — подключение к готовому по адресу из предыдущего шага. Работать нужно в контексте, который на сервере уже создан.
python
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- — последним, перед паролем:
ЛОГИН-zone-scraping_browser-country-СТРАНА-pid-ПРОФИЛЬ-dt-УСТРОЙСТВО-clickcaptcha-proxy-ПРОКСИ
Отключить решение капч выглядит так:
python
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
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
curl "https://api.2captcha.com/browser?key=ВАШ_API_КЛЮЧ"
Метод POST /browser/connection возвращает готовую строку connectionUri. Если указать новый идентификатор профиля, профиль создастся сразу и займёт место в лимите.
При превышении лимита аккаунтов создание нового отклоняется с ошибкой ERROR_MAX_ACCOUNTS.
Полный рабочий пример (Python)
python
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(), контекст берётся готовым. Селекторы и логика скрипта не трогаются.
Полезные ссылки
- Browser API: облачный браузер — https://rucaptcha.com/scraper/browser-api
- Документация Browser API — https://rucaptcha.com/scraper/browser-api/api
- Панель управления Browser API — https://rucaptcha.com/scraper/browser-api/dashboard
- Документация API решения капч — https://rucaptcha.com/api-docs
- Работа с прокси — https://rucaptcha.com/api-docs/proxy
- Python SDK RuCaptcha на GitHub — https://github.com/2captcha/2captcha-python