Tutorials

BeautifulSoup и CaptchaAI на собственных авторизованных страницах

Полноценный браузер для парсинга собственной авторизованной страницы с 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.

Комментарии для этой статьи отключены.