Guia
Tarefa (Token)
AWS WAF

AwsWafCaptcha: resolvendo AWS WAF

TIP

Crie a tarefa com o método createTask e obtenha o resultado com o método getTaskResult.

Os tipos de tarefa types que suportamos:

  • AntiAwsWafTask este tipo de tarefa requer seus próprios proxies.
  • AntiAwsWafTaskProxyLess este tipo de tarefa não requer seus próprios proxies.

Criar Tarefa

Crie uma tarefa de reconhecimento com o método createTask.

Estrutura do Objeto da Tarefa

PropriedadesTipoObrigatórioDescrição
typeStringObrigatórioAntiAwsWafTask
AntiAwsWafTaskProxyLess
proxyStringOpcionalSaiba Como usar proxies
websiteURLStringObrigatórioO URL da página que retorna informações relacionadas ao captcha
awsKeyStringOpcionalO valor key retornado pela página do captcha
awsIvStringOpcionalO valor iv retornado pela página do captcha
awsContextStringOpcionalO valor context retornado pela página do captcha
awsChallengeJSStringOpcionalO link challenge.js retornado pela página do captcha
awsApiJsStringOpcionalO link jsapi.js retornado pela página do captcha
awsProblemUrlStringOpcionalO URL do endpoint problem contendo palavras-chave como problem, num_solutions_required, etc.
awsApiKeyStringOpcionalO valor api_key do endpoint problem
awsExistingTokenStringOpcionalO aws-waf-token usado para a última verificação
Quais parâmetros devo usar?

Se você não tem certeza de quais parâmetros passar para o capsolver, consulte os cenários a seguir para diferentes combinações de parâmetros. Se a sua situação não estiver coberta, entre em contato com nosso serviço de atendimento ao cliente para obter assistência.

SituaçãoParâmetros a PassarPré-requisitos
Situação 1websiteURLO código de resposta da página do captcha AWS pode ser 405, e os seguintes parâmetros podem ser encontrados no html:
window.gokuProps = {"key":"AQID...","iv":"A6we...","context":"rGXm.."}
Situação 2websiteURL
awsKey
awsIv
awsContext
awsChallengeJS
Sob a premissa da situação 1, se o capsolver retornar uma mensagem de erro:Captcha render unexpect status code XXX, please pass in the awsKey, awsIv, awsContext and awsChallengeJs parameters, Isso indica que o servidor não acionou o captcha. Por favor, analise manualmente os parâmetros key, iv e context e passe-os para o capsolver.
Atenção especial
Se você receber uma mensagem de erro dizendo timeout metering, your parameters have expired, please update awsKey, awsIv, awsContext or awsChallengeJS., isso indica que os quatro parâmetros que você forneceu não correspondem entre si ou expiraram. Recomenda-se analisar todos os parâmetros em tempo real para cada solicitação.
Situação 3-1websiteURL
awsChallengeJS
Quando a página não consegue encontrar key, iv, context, mas possui challenge.js, passe challenge.js para o capsolver como o valor de awsChallengeJS.
Situação 3-2websiteURL
awsApiJs
Com base na situação 3-1, se não estiver claro de onde challenge.js vem, mas a página tiver jsapi.js, significa que challenge.js é montado a partir do código de jsapi.js, então jsapi.js pode ser passado diretamente para o capsolver como o valor de awsApiJs.
Situação 4websiteURL
awsProblemUrl
Em casos especiais, quando a página não consegue encontrar key, iv, context, challenge.js, e só tem captcha.js, você precisa passar o URL do endpoint problem para o capsolver. awsProblemUrl deve conter valores como problem e num_solutions_required. Esses valores podem ser encontrados procurando por visualSolutionsRequired no html da página.

Exemplo completo de awsProblemUrl:https://ait.2608283a.us-east-1.captcha.awswaf.com/ait/ait/ait/problem?kind=visual&domain=www.amazon.com&locale=en-us&problem=gridcaptcha-5-0.15-0&num_solutions_required=2
Situação 5websiteURL
awsApiKey
awsApiJs
awsExistingToken
Isso geralmente ocorre em situações que exigem verificação secundária. O endpoint problem contém um api_key (cujo valor é tipicamente constante para cada site) como awsApiKey. A página tem um jsapi.js como awsApiJs, e o aws-waf-token da verificação anterior é passado para o capsolver como awsExistingToken

Exemplo de Requisição

POST https://api.capsolver.com/createTask
Host: api.capsolver.com
Content-Type: application/json
 
{
    "clientKey": "YOUR_API_KEY",
    "task": {
        "type": "AntiAwsWafTask", // AntiAwsWafTaskProxyLess
        "websiteURL": "https://efw47fpad9.execute-api.us-east-1.amazonaws.com/latest", // Required
        "awsKey": "AQIDAHjcYu/GjX+QlghicBg......shMIKvZswZemrVVqA==",  // Optional
        "awsIv": "CgAAFDIlckAAAAid",  // Optional
        "awsContext": "7DhQfG5CmoY90ZdxdHCi8WtJ3z......njNKULdcUUVEtxTk=",  // Optional
        "awsChallengeJS": "https://41bcdd4fb3cb.610cd090.us-east-1.token.awswaf.com/41bcdd4fb......a6c832/challenge.js",  // Optional
        "awsApiJs": "https://9175c2fd4189.edge.captcha-sdk.awswaf.com/9175c2fd4189/jsapi.js",  // Optional
        "awsProblemUrl": "https://ait...awswaf.com/ait/ait/ait/problem?kind=visual&...&problem=gridcaptcha-5-0.1-0&num_solutions_required=2",  // Optional
        "awsApiKey": "Sps+L2gV...",  // Optional
        "awsExistingToken": "5na16dg6-216a-...",  // Optional
        "proxy": "http:ip:port:user:pass" // socks5:ip:port:user:pass
    }
}

Depois de nos enviar a tarefa, você deverá receber um ‘taskId’ na resposta, se for bem-sucedido. Por favor, leia errorCode: lista completa de erros se você não recebeu o ID da tarefa. Para mais informações, você também pode consultar esta postagem de blog Como resolver o token captcha da AWS Amazon

Exemplo de Resposta

{
    "errorId": 0,
    "errorCode": "",
    "errorDescription": "",
    "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}

Obtendo Resultados

Depois de ter o taskId, você precisa enviar o taskId para recuperar a solução. A estrutura da resposta é explicada em getTaskResult.

Dependendo da carga do sistema, você obterá os resultados dentro do intervalo de 5s a 30s

Exemplo de Requisição

POST https://api.capsolver.com/getTaskResult
Host: api.capsolver.com
Content-Type: application/json
 
{
    "clientKey": "YOUR_API_KEY",
    "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}

Exemplo de Resposta

{
  "errorId": 0,
  "taskId": "646825ef-9547-4a29-9a05-50a6265f9d8a",
  "status": "ready",
  "solution": {
    "cookie": "223d1f60-0e9f-4238-ac0a-e766b15a778e:EQoAf0APpGIKAAAA:AJam3OWpff1VgKIJxH4lGMMHxPVQ0q0R3CNtgcMbR4VvnIBSpgt1Otbax4kuqrgkEp0nFKanO5oPtwt9+Butf7lt0JNe4rZQwZ5IrEnkXvyeZQPaCFshHOISAFLTX7AWHldEXFlZEg7DjIc="
  }
}

Usar Requisição via SDK

# pip install --upgrade capsolver
# export CAPSOLVER_API_KEY='...'
 
import capsolver
 
# capsolver.api_key = "..."
solution = capsolver.solve({
    "type": "AntiAwsWafTask",
    "websiteURL": "https://efw47fpad9.execute-api.us-east-1.amazonaws.com/latest",
    "proxy": "ip:port:user:pass"
})

Código de Exemplo

# pip install requests
import requests
import time
 
api_key = "YOUR_API_KEY"  # TODO: sua chave de API do capsolver
site_url = "https://efw47fpad9.execute-api.us-east-1.amazonaws.com/latest"  # TODO: URL da página do seu site
 
 
def capsolver():
    payload = {
        "clientKey": api_key,
        "task": {
            "type": 'AntiAwsWafTaskProxyLess',
            "websiteURL": site_url
        }
    }
    res = requests.post("https://api.capsolver.com/createTask", json=payload)
    resp = res.json()
    task_id = resp.get("taskId")
    if not task_id:
        print("Falha ao criar tarefa:", res.text)
        return
    print(f"Obtido taskId: {task_id} / Obtendo resultado...")
 
    while True:
        time.sleep(1)  # atraso
        payload = {"clientKey": api_key, "taskId": task_id}
        res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
        resp = res.json()
        status = resp.get("status")
        if status == "ready":
            return resp.get("solution", {}).get('cookie')
        if status == "failed" or resp.get("errorId"):
            print("Falha na resolução! resposta:", res.text)
            return
 
 
token = capsolver()
print(token)