Resolva reCAPTCHA Enterprise com Python
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:
python -m pip install https://solvethree.com/downloads/solvethree_sdk-0.1.0-py3-none-any.whl- 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.
Defina SOLVETHREE_API_KEY
No shell ou ambiente de implantação que executará o script, defina
SOLVETHREE_API_KEYcom 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.
Defina SOLVETHREE_PROXY
Defina
SOLVETHREE_PROXYcom 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émproxyCandidates.
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.
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.
# 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, useget_taskpara 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 mesmorequestId. 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 camposerrorCodeeerrorantes 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.
Fontes e referência da API
Execute sua primeira tarefa.
Comece com $5 em créditos no espaço de trabalho.