Resolva reCAPTCHA Enterprise com Python

Por solvethree4 min de leitura

Use o SDK oficial de Python para solicitar um token reCAPTCHA v3 Enterprise e, em seguida, envie solution.token com a identidade de navegador retornada e o mesmo proxy. Você precisará do Python 3.10 ou posterior, de uma chave de API do workspace e de um perfil ativo para o site de destino.

Nesta página

Instale o SDK e configure seu site

Instale o SDK oficial de Python:

Instalar o SDK Python
python -m pip install https://solvethree.com/downloads/solvethree_sdk-0.1.0-py3-none-any.whl
  1. 1.

    Crie o perfil do site

    Configure o nome de host de destino no console da solvethree e verifique se o perfil está ativo e disponível para seu workspace. Enviar um nome de host em uma solicitação de resolução não cria um perfil. Consulte a configuração do perfil do site se ainda não tiver configurado um.

  2. 2.

    Defina SOLVETHREE_API_KEY

    No shell ou ambiente de implantação que executará o script, defina SOLVETHREE_API_KEY com a chave de API do seu workspace. Mantenha-a no servidor, não no código do navegador nem em um arquivo de código-fonte versionado.

  3. 3.

    Defina SOLVETHREE_PROXY

    Defina SOLVETHREE_PROXY com a URL do proxy que será usado na resolução e na solicitação subsequente à aplicação. O exemplo usa um único proxy, portanto não adicione também proxyCandidates.

Solicite o token Enterprise

Salve este exemplo como solve.py. Substitua accounts.example.com pelo nome de host configurado, sem esquema nem caminho, e substitua login pela ação usada na página de destino.

Python · solve.py
import os
from uuid import uuid4
from solvethree import Solvethree, SolvethreeError, TaskFailedError

client = Solvethree(os.environ["SOLVETHREE_API_KEY"])
request = {
    "site": "accounts.example.com",  # Use your configured hostname.
    "action": "login",              # Use the page's actual action.
    "proxy": os.environ["SOLVETHREE_PROXY"],
    "requestId": str(uuid4()),
}
try:
    result = client.solve(request, timeout=180)
except TaskFailedError as error:
    raise SystemExit(f"Task failed: {error.error_code}") from None
except SolvethreeError as error:
    # Keep these IDs so an interrupted request can be recovered.
    raise SystemExit(f"Recover request {error.request_id}, task {error.task_id}") from None

solution = result["solution"]
token = solution["token"]
user_agent = solution["userAgent"]
client_hints = solution["secChUa"]
print("Ready task:", result["id"])  # Do not print the token or proxy password.

A solicitação usa enterprise-v3 por padrão, portanto não precisa de um campo recaptchaType. Não adicione type nem url; esses não são campos de solicitação do reCAPTCHA.

Solvethree é síncrono. client.solve cria a tarefa uma única vez e consulta seu status periodicamente até retornar um resultado pronto ou lançar uma exceção. Aqui, timeout=180 define um limite de 180 segundos para a espera do cliente. Em caso de sucesso, o script extrai o token, o agente de usuário e as dicas do cliente sem imprimir valores sensíveis.

Envie o token à sua aplicação

Continue no mesmo script após a resolução. Instale requests separadamente, conforme indicado no exemplo. Substitua a URL de login e os dados do formulário pela solicitação real da sua aplicação, incluindo as credenciais, o token CSRF e os cookies de sessão necessários.

Python requests · aplicar uma solução pronta
# Continue after client.solve(). Install requests separately: pip install requests.
import requests

# This example endpoint accepts the standard reCAPTCHA form field.
# Use your application's real URL, form fields, CSRF token and session.
response = requests.post(
    "https://accounts.example.com/login",
    data={"g-recaptcha-response": solution["token"]},
    headers={
        "User-Agent": solution["userAgent"],
        "sec-ch-ua": solution["secChUa"],
    },
    proxies={"http": request["proxy"], "https": request["proxy"]},
    timeout=30,
    allow_redirects=False,
)
# Inspect the application's response to determine whether it accepted the request.
print("Application HTTP status:", response.status_code)

Este exemplo pressupõe que a aplicação aceita o token em g-recaptcha-response. Verifique a solicitação real em vez de presumir esse nome de campo. Se o formulário depender de uma sessão existente, envie por essa sessão em vez de fazer uma nova solicitação sem cookies.

Mantenha os valores retornados de userAgent e secChUa e use o mesmo proxy fornecido na resolução. Trocar de IP ou substituir a identidade de navegador por outra sem relação pode fazer a solicitação falhar.

Uma tarefa pronta significa que uma solução foi gerada, não que a aplicação a aceitou. Inspecione a resposta da aplicação e a sessão resultante; um status HTTP, por si só, não comprova que o login foi bem-sucedido. Se a aplicação rejeitar o token, verifique a solicitação enviada antes de pagar por outra resolução: ela deve conter solution.token, não o ID da tarefa nem um token antigo. Consulte o diagnóstico de um token rejeitado.

Recupere uma resolução interrompida sem criar outra tarefa

O exemplo gera um novo requestId sempre que o script é iniciado. Salve esse ID e a solicitação original antes de chamar solve se precisar recuperar a operação após reiniciar o processo. Simplesmente executar o script novamente cria uma nova solicitação lógica.

  • Se uma exceção incluir task_id, use get_task para retomar as consultas de status dessa tarefa. Não crie uma substituta só porque a conexão atingiu o tempo limite.
  • Se a criação foi interrompida e você só tem request_id, reenvie a solicitação de tarefa idêntica com o mesmo requestId. Isso retorna a tarefa existente; alterar os dados de entrada da tarefa reutilizando o ID gera um conflito.
  • Em caso de TaskFailedError, pare de consultar essa tarefa. Inspecione seus campos errorCode e error antes de tentar novamente; outra resolução não corrigirá dados de entrada inválidos que não foram alterados. Resoluções com falha são reembolsadas.

O SDK não tenta criar a tarefa novamente de forma automática. Ele respeita Retry-After em falhas temporárias nas consultas de status, dentro do prazo de resolução. Para ter mais controle sobre a espera e a recuperação, consulte consultas de status de tarefas e tempos limite.

Execute sua primeira tarefa.

Comece com $5 em créditos no espaço de trabalho.

Criar um espaço de trabalho
Resolva reCAPTCHA Enterprise com Python · solvethree