Полноценный браузер для парсинга собственной авторизованной страницы с CAPTCHA нужен не всегда: если сервер отдаёт готовый HTML, связка requests + BeautifulSoup + CaptchaAI решает задачу быстрее и с меньшим числом движущихся частей, чем headless-браузер. Ниже — рабочий шаблон, наблюдаемость по логам и QA-чек-лист именно для собственных или явно авторизованных страниц.
Периметр применения: руководство рассчитано только на собственные или явно авторизованные QA-, staging- и production-среды. Дальше — диагностика, тестирование и наблюдаемость вашей CAPTCHA-интеграции, а не инструкции для сторонних сайтов и не для несанкционированных сценариев.
Когда BeautifulSoup — правильный выбор
Если CAPTCHA отрисовывается на сервере и не подгружается через JavaScript, BeautifulSoup вместе с requests обычно быстрее headless-браузера и проще встраивается в CI. Пример: QA-команда небольшого финтех-стартапа в Алматы каждую ночь гоняет около 200 прогонов против staging-версии формы логина с Cloudflare Turnstile — задача не в обходе защиты, а в том, чтобы после каждого деплоя убедиться, что форма по-прежнему принимает валидный токен. Для такого объёма обычно хватает плана ADVANCE ($90/мес, 50 потоков); если ночной прогон бьёт сразу по нескольким средам параллельно, разумнее считать пиковую параллельность и смотреть в сторону PREMIUM ($170/мес, 100 потоков).
Если тестовые сценарии заполняют форму данными, похожими на пользовательские, держите их синтетическими и изолированными от продакшена — это особенно уместно с учётом требований 152-ФЗ «О персональных данных» и аналогичных норм для команд, тестирующих из других юрисдикций: собирайте и храните только то, что вы вправе обрабатывать.
Шаблон: sitekey → решение → повторная отправка
Минимальная последовательность: получить HTML, найти sitekey, решить CAPTCHA через CaptchaAI и отправить форму повторно с токеном.
import os, requests
from bs4 import BeautifulSoup
API_KEY = os.environ['CAPTCHAAI_KEY']
PAGE = 'https://staging.example.com/captcha-demo'
def solve(sitekey: str) -> str:
...
html = requests.get(PAGE).text
soup = BeautifulSoup(html, 'html.parser')
sitekey = soup.select_one('.g-recaptcha')['data-sitekey']
token = solve(sitekey)
resp = requests.post(PAGE, data={
'g-recaptcha-response': token,
'message': 'qa-test',
})
result = BeautifulSoup(resp.text, 'html.parser')
На собственном стенде замените PAGE и селектор .g-recaptcha на актуальные для вашей формы — сама последовательность шагов не меняется независимо от типа CAPTCHA.
Что делать с результатом парсинга
Забирайте только те поля, которые принадлежат вашему приложению, — ID заказа, статус формы, текст ошибки. Работа с чужими доменами возможна только при письменном разрешении владельца и в рамках его условий использования; во всех остальных случаях BeautifulSoup здесь просто разбирает HTML-ответ, который вернул ваш собственный backend.
Логи и метрики между релизами
Структурированные логи — самый быстрый способ сравнить поведение CAPTCHA между релизами и поймать регрессию в собственной форме раньше, чем её увидят пользователи:
import json, time, logging
log = logging.getLogger('captcha-qa')
def record(event: str, **fields) -> None:
payload = {'ts': time.time(), 'event': event, **fields}
log.info(json.dumps(payload, ensure_ascii=False))
Минимальный набор полей на каждую попытку: slug, captcha_type, task_id, wait_seconds, verify_status, env. Этого достаточно, чтобы за несколько минут собрать дашборд с медианой, P90 и P99 по типу CAPTCHA и среде — и сразу видеть, поднял деплой время решения или нет.
Troubleshooting: типичные симптомы
| Симптом | Что проверить |
|---|---|
| sitekey не найден | Селектор и то, что страница вообще рендерится без JS |
| Токен не принят backend | Сверьте pageurl — он должен совпадать с реальным URL страницы |
| Парсер падает | Кодировку и структуру HTML-ответа |
| Сессия обнуляется между запросами | Используйте requests.Session(), а не отдельные вызовы requests.get/post |
| 429 от backend | Снизьте параллелизм и добавьте задержку между попытками |
QA-чек-лист перед прогоном
- Запрос идёт только на собственные или явно авторизованные endpoints.
- Тестовые аккаунты, платежи и события помечены как фиктивные и не пересекаются с продакшн-данными.
- CAPTCHA-токен всегда проверяется на вашем backend, а не только на клиенте.
- Логи фиксируют
task_id, тип CAPTCHA, время ожидания и итоговый статус (pass/fail). - Скрипт возвращает корректный exit code, чтобы CI мог заблокировать мердж при регрессии.
- Селекторы sitekey и структура формы синхронизированы с последним деплоем — их стоит перепроверять при каждом релизе фронтенда.
Частые вопросы
Подходит ли этот шаблон для чужих сайтов?
Нет. Все сценарии в этом руководстве — только для собственных или явно авторизованных сред. Для стороннего ресурса нужно письменное разрешение владельца, иначе используйте только его официальный API.
Что делать, если CaptchaAI вернул ошибку или timeout?
Логируйте task_id, тип CAPTCHA и текст ошибки, повторяйте запрос с экспоненциальной задержкой и считайте долю ошибок по дашборду. Если доля растёт от релиза к релизу — проверьте sitekey и то, что страница рендерится так же, как ожидает парсер.
Сколько потоков нужно для ночного QA-прогона?
Для нескольких сотен попыток в час обычно хватает ADVANCE ($90/мес, 50 потоков); если прогоняете несколько сред параллельно, посчитайте пиковую параллельность и сверьтесь с тарифами на captchaai.com/pricing — план должен покрывать пиковую нагрузку, а не среднюю.
Чем BeautifulSoup лучше браузера для таких проверок?
Он не поднимает сам браузер и не ждёт рендеринга JS, поэтому проверка проходит быстрее и стабильнее в CI. Как только CAPTCHA подгружается через JavaScript или сайт использует fingerprinting, переходите на Selenium/Playwright — для такой страницы BeautifulSoup уже не подходит.
Как сравнивать результаты между релизами?
Пишите логи в одном формате и стройте отчёт по медиане, P90 и P99 на одинаковом наборе сценариев. Сравнивайте только сопоставимые выборки в собственной среде — другой браузер, регион или набор форм искажают сравнение.
Безопасные связанные руководства
- Быстрый старт с CaptchaAI
- QA CAPTCHA в авторизованных средах
- Тестирование CAPTCHA API на своих формах
- Браузерный тест падает, а API проходит — разбор
- Решение reCAPTCHA v2 через API
- Решение Cloudflare Turnstile через API
- Решение GeeTest v3 через API
Готовы подключить парсинг своих авторизованных страниц? Настройте CaptchaAI.