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.0.tar.gz (70.7 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.0.tar.gz.

File metadata

File hashes

Hashes for hcaptcha_challenger_tributojusto-0.20.0.tar.gz
Algorithm Hash digest
SHA256 e2d6d323d13ea90ea2e370a03c5885978e012d190d359ca7797cf3ba4aec9a19
MD5 43b9433358ff4b34e5426a6c6069bf64
BLAKE2b-256 50ef6909efd920f47e0acb729e90e82abb2a85e64e17bb9a93ee8a82e1ad8c24

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for hcaptcha_challenger_tributojusto-0.20.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1b3b31e9f3e7cd19192cc212b26a7faf7e11e51c37d09a8920f3db9c44ccebed
MD5 e22d5737427057bbce75b3c80ff81f47
BLAKE2b-256 1b4624c4bb042738d6568b14ca1aa0390e769d60c721d3331e631c3b16e79cdc

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