Skip to main content

Autonomous hCaptcha solver using Google Gemini multimodal models with Playwright + Camoufox.

Project description

hcaptcha-challenger

Biblioteca Python para resolução autônoma de desafios hCaptcha via modelos multimodais (Gemini). Integra com Playwright + Camoufox para automação stealth de navegadores.

Instalação

pip install hcaptcha-challenger

Ou com uv:

uv add hcaptcha-challenger

Pré-requisitos

GEMINI_API_KEY=sua_chave_aqui

Uso básico

import asyncio
from camoufox import AsyncCamoufox
from hcaptcha_challenger import AgentV, AgentConfig
from hcaptcha_challenger.models import ChallengeSignal

async def main():
    async with AsyncCamoufox(headless=False, humanize=True) as browser:
        page = browser.pages[-1] if browser.pages else await browser.new_page()

        agent = AgentV(
            page=page,
            agent_config=AgentConfig(
                DISABLE_BEZIER_TRAJECTORY=True,  # Camoufox já humaniza os movimentos
            ),
        )

        await page.goto("https://exemplo.com/pagina-com-hcaptcha")

        # hCaptcha visível (com checkbox)
        await agent.robotic_arm.click_checkbox()
        signal = await agent.wait_for_challenge()

        if signal == ChallengeSignal.SUCCESS:
            print("hCaptcha resolvido com sucesso!")

asyncio.run(main())

hCaptcha invisível

Para páginas onde o hCaptcha é disparado automaticamente (sem checkbox visível):

# Não chame click_checkbox() — apenas aguarde o desafio
signal = await agent.wait_for_challenge()

Configuração avançada

agent_config = AgentConfig(
    # Modelo Gemini para classificação de imagens
    IMAGE_CLASSIFIER_MODEL="gemini-2.5-flash",

    # Timing de cliques (reduza para evitar timeouts em conexões lentas)
    CLICK_DELAY_MS=80,
    INTER_CLICK_DELAY_S=0.2,
    SUBMIT_DELAY_S=0.5,

    # Número máximo de tentativas antes de desistir
    MAX_CHALLENGE_ATTEMPTS=4,

    # Logs detalhados de debug
    enable_challenger_debug=True,

    # Desabilita trajetória Bezier (use quando o browser já humaniza movimentos)
    DISABLE_BEZIER_TRAJECTORY=True,

    # Rotação de múltiplas chaves Gemini (separe por vírgula no .env)
    # GEMINI_API_KEYS=chave1,chave2,chave3
)

Todas as opções podem ser definidas via variáveis de ambiente ou arquivo .env.

Múltiplas chaves de API (rotação)

Para alta disponibilidade com fallback automático entre modelos:

GEMINI_API_KEYS=chave1,chave2,chave3

O provider tenta automaticamente os modelos na seguinte ordem em caso de erro 503/429: gemini-2.5-progemini-2.5-flashgemini-3-flash-previewgemini-2.5-flash-lite → ...

Estrutura do projeto

src/hcaptcha_challenger/
├── agent/
│   ├── agent.py          # AgentV — máquina de estados principal
│   ├── config.py         # AgentConfig, SolveState
│   ├── robotic_arm.py    # Coordenador dos pilots e reasoners
│   ├── logger.py         # Logging rico com Rich
│   └── pilot/
│       ├── actions.py    # Cliques, drag-drop, mouse
│       ├── navigation.py # Detecção de frames e desafios
│       ├── challenges.py # Handlers por tipo de desafio
│       └── core.py       # Interceptação de rede (payload/resposta)
├── tools/
│   ├── image_classifier/     # Desafios 9-grid (image_label_binary)
│   ├── challenge_router/     # Classificação do tipo de desafio
│   └── spatial/              # Reasoners para drag-drop e area-select
├── skills/
│   ├── rules.yaml            # Regras de correspondência prompt → template
│   └── library/              # Templates Markdown de instruções por desafio
└── models.py                 # Tipos e modelos de dados (Pydantic)

Tipos de desafio suportados

Tipo Descrição
image_label_binary Seleção em grid 3x3 (ex: "selecione todos os gatos")
image_label_area_select Clique em pontos específicos da imagem
image_drag_single Arrastar um elemento para a posição correta
image_drag_multi Múltiplos drag-drops em sequência
image_label_multi_select Seleção múltipla em polígonos

Skills (instruções por tipo de desafio)

O sistema de skills permite adicionar instruções específicas para padrões de desafio recorrentes. As regras ficam em skills/rules.yaml e os templates em skills/library/.

Exemplo de regra para desafios de referência visual:

- triggers: ["semelhantes", "referência"]
  job_type: "image_label_binary"
  template: "binary_similar_reference.md"

Para adicionar suas próprias skills:

AgentConfig(custom_skills_path="meus_skills/rules.yaml")

Token de resposta

from hcaptcha_challenger import CaptchaResponse

signal = await agent.wait_for_challenge()

if agent.cr_list:
    cr: CaptchaResponse = agent.cr_list[-1]
    print(cr.generated_pass_UUID)  # token para submissão

Licença

GPL-3.0-or-later

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hcaptcha_challenger_tributojusto-0.20.1.tar.gz (71.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file hcaptcha_challenger_tributojusto-0.20.1.tar.gz.

File metadata

File hashes

Hashes for hcaptcha_challenger_tributojusto-0.20.1.tar.gz
Algorithm Hash digest
SHA256 f1f1f081ed6888e9a81ce1d5ebb5674ead766007e1038f3411a35b2276a13b52
MD5 c206b01b62ea8c9f8f7087848de1710b
BLAKE2b-256 1e6fd40d9c72588427c21f38136f8fd13b9724053f8b17d29427eca908e1cce9

See more details on using hashes here.

File details

Details for the file hcaptcha_challenger_tributojusto-0.20.1-py3-none-any.whl.

File metadata

File hashes

Hashes for hcaptcha_challenger_tributojusto-0.20.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8c8c9b8bd48a604324ebdd2f475ebf4154f7c8e27aa3d295904b91299f7fe6b9
MD5 6e445f783efd5988f582097318aa3daf
BLAKE2b-256 a738fe197e9707399e212e2f38ba4c939a24d846dd943eead8c560ac64e29b77

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page