""" реестр детекторов, порядок проверки """ 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}")