Files
robotex/src/antibot/registry.py
T
protokeyandClaude Opus 5.5 df108dae3f fix: ложный status ok и падение без captcha_type
- без captcha_type шаг антибота пропускается, на неизвестный тип — понятная ошибка
- wait_for и pass_challenge при неудаче падают, а не возвращают текст ошибки как результат
- status "err" ставится по упавшему действию (раньше проверялся несуществующий ключ error)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 13:55:36 +04:00

34 lines
915 B
Python

"""
реестр детекторов, порядок проверки
"""
from patchright.async_api import Page
from .base import AntiBotProvider
from .exceptions import ProviderNotDetected
_detectors: list[AntiBotProvider] = []
def register(provider_cls) -> AntiBotProvider:
_detectors.append(provider_cls())
return provider_cls
async def select_any(page: Page, **kwargs) -> AntiBotProvider:
for provider in _detectors:
if await provider.detect(page):
provider.configure(**kwargs)
return provider
else:
raise ProviderNotDetected()
async def select_one(page: Page, provider_name: str, **kwargs) -> AntiBotProvider:
for provider in _detectors:
if provider.provider == provider_name:
provider.configure(**kwargs)
return provider
else:
known = ", ".join(p.provider for p in _detectors)
raise ProviderNotDetected(f"unknown captcha_type {provider_name!r}, expected one of: {known}")