- без captcha_type шаг антибота пропускается, на неизвестный тип — понятная ошибка - wait_for и pass_challenge при неудаче падают, а не возвращают текст ошибки как результат - status "err" ставится по упавшему действию (раньше проверялся несуществующий ключ error) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
34 lines
915 B
Python
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}")
|