ProdutosIntegraçõesRecursosDocumentaçãoPreços
Começar agora

© 2026 CapSolver. All rights reserved.

Contacte-nos

Slack: lola@capsolver.com

Produtos

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • Extensão de Navegador
  • Mais tipos de CAPTCHA

Integrações

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • Parceiros
  • Ver todas as integrações

Recursos

  • Programa de Referenciação
  • Documentação
  • Referência da API
  • Blog
  • FAQ
  • Glossário
  • Estado

Legal

  • Termos de Serviço
  • Política de Privacidade
  • Política de Reembolso
  • Não vender os meus dados pessoais
Blog/aws waf/Como resolver o desafio AWS / Captcha com Python
Sep20, 2023

Como resolver o desafio AWS / Captcha com Python

Adélia Cruz

Adélia Cruz

Neural Network Developer

Introdução

Seus tarefas de raspagem de web ou automação estão sendo bloqueadas por um AWS WAF (Firewall de Aplicativos Web) aparentemente insuperável? Este é um desafio comum para muitos desenvolvedores. O AWS WAF é um serviço de segurança poderoso da Amazon projetado para proteger sites contra explorações web comuns e bots maliciosos. Ele identifica e bloqueia atividades suspeitas analisando padrões de tráfego, usando métodos que incluem desafios de JavaScript (retornando um código de status 202) e captchas de imagem mais complexos (retornando um código de status 405).

Embora essas medidas de segurança sejam essenciais para a proteção do site, elas podem ser um grande obstáculo para scripts de automação legítimos. Felizmente, com as ferramentas certas, você pode contornar efetivamente essas proteções. Este guia fornecerá um passo a passo detalhado sobre como usar o Python e CapSolver para obter facilmente o aws-waf-token, permitindo acesso sem interrupções a sites protegidos pelo AWS WAF.

⚙️ Pré-requisitos

Antes de começar, certifique-se de ter as seguintes ferramentas e informações prontas:

  • Um proxy funcional: Isso é crucial para resolver o AWS WAF. É altamente recomendado usar proxies de ISP ou residenciais para evitar ser bloqueado devido a má reputação de IP.
  • Python instalado: Certifique-se de que o Python está instalado no seu sistema.
  • Chave de API do CapSolver: Você precisará de uma conta no CapSolver (Registre-se) para obter sua chave de API no painel.

🤖 Passo 1: Instalar Pacotes Python Necessários

Primeiro, precisamos instalar algumas bibliotecas Python importantes para fazer solicitações HTTP e analisar HTML. Abra seu terminal e execute o seguinte comando:

bash Copy
pip install capsolver requests beautifulsoup4

👨‍💻 Passo 2: Escrever Código Python para Resolver o AWS WAF

O seguinte é o código Python completo para resolver desafios e captchas do AWS WAF usando o CapSolver. Este código baseia-se nas práticas mais recentes da documentação oficial do CapSolver, possui uma estrutura mais limpa e lida automaticamente com os dois cenários mais comuns de bloqueio.

Código Python Atualizado

python Copy
import capsolver
import requests
from bs4 import BeautifulSoup
import re
from urllib.parse import urlparse

# -------------------POR FAVOR MODIFIQUE ESTES VALORES-------------------
# Seus detalhes de proxy no formato: http://username:password@ip:port
PROXY = "http://username:password@ip:port"
# A URL do site alvo que você deseja resolver o AWS WAF
PAGE_URL = "https://www.seu-site-aws-protegido.com"
# Sua chave de API do CapSolver do painel
CAPSOLVER_API_KEY = "SUA_CHAVE_API"
# ----------------------------------------------------------------

def solve_aws_waf(is_captcha_challenge, **kwargs):
    """
    Resolve um desafio AWS WAF ou captcha usando o CapSolver.
    :param is_captcha_challenge: True para um captcha (código de status 405), False para um desafio de JS (código de status 202).
    :param kwargs: Parâmetros necessários para a tarefa de resolução.
    :return: O objeto de solução, ou None em caso de falha.
    """
    task_type = "AntiAwsWafTask" if is_captcha_challenge else "AntiAwsWafTaskProxyLess"
    print(f"Criando tarefa '{task_type}'...")
    
    task_payload = {
        "type": task_type,
        "websiteURL": PAGE_URL,
    }
    
    # Adicione parâmetros específicos com base no tipo de desafio
    if is_captcha_challenge:
        # Para desafios de captcha, são necessários awsKey, awsIv, awsContext
        task_payload.update({
            "awsKey": kwargs.get("awsKey"),
            "awsIv": kwargs.get("awsIv"),
            "awsContext": kwargs.get("awsContext"),
            "awsChallengeJS": kwargs.get("awsChallengeJS"),
            "proxy": PROXY
        })
    else:
        # Para desafios de JS, apenas a URL awsChallengeJS é necessária
        task_payload["awsChallengeJS"] = kwargs.get("awsChallengeJS")

    try:
        solution = capsolver.solve(task_payload)
        if solution and solution.get("errorId", 0) == 0:
            print("Solução obtida com sucesso!")
            return solution
        else:
            error_desc = solution.get('errorDescription', 'Erro desconhecido') if solution else 'Erro desconhecido'
            print(f"Falha ao resolver a tarefa: {error_desc}")
            return None
    except Exception as e:
        print(f"Ocorreu uma exceção ao chamar o CapSolver: {e}")
        return None

def main():
    """Função principal para executar todo o processo."""
    capsolver.api_key = CAPSOLVER_API_KEY
    session = requests.Session()
    session.proxies = {"http": PROXY, "https": PROXY}
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
    }

    print(f"Tentando acessar: {PAGE_URL}")
    response = session.get(PAGE_URL, headers=headers)
    print(f"Código de status recebido: {response.status_code}")

    solution = None
    
    # Cenário 1: Tratar desafio JavaScript do AWS (Código de status 202)
    if response.status_code == 202:
        print("Desafio JavaScript do AWS detectado.")
        soup = BeautifulSoup(response.content, 'html.parser')
        script_tag = soup.find('script', {'src': re.compile(r'token\.awswaf\.com')})
        if script_tag:
            challenge_js_url = script_tag['src']
            print(f"Encontrada URL do desafio JS: {challenge_js_url}")
            solution = solve_aws_waf(is_captcha_challenge=False, awsChallengeJS=challenge_js_url)
        else:
            print("Erro: Não foi possível encontrar o script de desafio AWS.")

    # Cenário 2: Tratar Captcha do AWS (Código de status 405)
    elif response.status_code == 405:
        print("Captcha do AWS detectado.")
        soup = BeautifulSoup(response.content, 'html.parser')
        script_tag = soup.find('script', {'src': re.compile(r'token\.awswaf\.com')})
        script_text_tag = soup.find('script', string=re.compile('.*key.*'))
        
        if script_tag and script_text_tag:
            challenge_js_url = script_tag['src']
            script_text = script_text_tag.string
            
            key = re.search(r'"key":"(.*?)"', script_text).group(1)
            iv = re.search(r'"iv":"(.*?)"', script_text).group(1)
            context = re.search(r'"context":"(.*?)"', script_text).group(1)
            
            print(f"Parâmetros extraídos: Chave={key[:5]}..., IV={iv[:5]}..., Contexto={context[:5]}...")
            solution = solve_aws_waf(
                is_captcha_challenge=True,
                awsKey=key,
                awsIv=iv,
                awsContext=context,
                awsChallengeJS=challenge_js_url
            )
        else:
            print("Erro: Falha ao extrair todos os parâmetros necessários do captcha da página.")

    # Se resolvido com sucesso, defina o cookie e tente novamente a solicitação
    if solution and solution.get("cookie"):
        aws_token = solution["cookie"]
        print(f"Obtido com sucesso o aws-waf-token: {aws_token[:30]}...")
        
        domain = f".{urlparse(PAGE_URL).netloc}"
        session.cookies.set("aws-waf-token", aws_token, domain=domain)
        
        print("Cookie definido. Tentando novamente a solicitação...")
        final_response = session.get(PAGE_URL, headers=headers)
        print(f"Código de status da solicitação final: {final_response.status_code}")
        
        if final_response.status_code == 200:
            print("Bypass do AWS WAF realizado com sucesso!")
            # print(final_response.text) # Remova o comentário para ver o conteúdo da página
        else:
            print("A solicitação falhou após definir o cookie. Verifique o token ou o proxy.")
    else:
        print("Falha ao resolver o AWS WAF. Saindo.")

if __name__ == "__main__":
    main()

⚠️ Variáveis Importantes a Modificar

Antes de executar o código, certifique-se de modificar as seguintes variáveis:

  • PROXY: Substitua esta variável pelo endereço e credenciais do seu servidor proxy. O formato deve ser http://username:password@ip:port.
  • CAPSOLVER_API_KEY: Encontre sua chave de API no Painel do CapSolver e substitua o espaço reservado.
  • PAGE_URL: Substitua esta variável pela URL do site alvo protegido pelo AWS WAF.

Conclusão

Ao integrar o CapSolver ao seu fluxo de automação Python, você pode lidar efetivamente com desafios de JavaScript e captchas disparados pelo AWS WAF. Este método simplifica um processo de verificação complexo em uma única chamada de API, permitindo que você se concentre na lógica do seu negócio em vez de se envolver em uma batalha constante com tecnologias anti-bot. Esta é uma solução valiosa para qualquer desenvolvedor que precise interagir com sites protegidos pelo AWS WAF.

Use o código de bônus CAPN ao recarregar sua conta do CapSolver para obter um bônus adicional de 5% em cada recarga — sem limites.
Redeeme-o agora no seu Painel do CapSolver

Perguntas Frequentes (FAQ)

Q1: Por que devo usar um proxy?
A1: O AWS WAF monitora estritamente o comportamento dos endereços IP. Solicitações de centros de dados ou IPs marcados como suspeitos são facilmente bloqueadas. Usar um proxy de alta qualidade residencial ou de ISP imita o comportamento de acesso de um usuário real e é um passo crítico para superar com sucesso o WAF.

Q2: Quanto tempo o aws-waf-token é válido?
A2: A validade deste token é geralmente muito curta, possivelmente apenas alguns minutos. Após a expiração do token, você precisa executar novamente o processo de verificação para obter um novo. É importante projetar uma lógica de atualização de token em seu aplicativo.

Q3: Qual é a diferença entre AntiAwsWafTask e AntiAwsWafTaskProxyLess?
A3: AntiAwsWafTask é usado para resolver o captcha do AWS, que requer um ambiente de navegador completo (normalmente visto com um código de status 405) e precisa de um proxy fornecido por você. AntiAwsWafTaskProxyLess é usado para o desafio mais simples de JavaScript (código de status 202), que é resolvido nos servidores do CapSolver e não requer que você forneça um proxy. Nosso código seleciona automaticamente o tipo de tarefa apropriado com base no código de status.

Q4: Este método funciona para todos os sites que usam o AWS WAF?
A4: Este método é eficaz para a maioria das configurações padrão do AWS WAF. No entanto, os proprietários de sites podem personalizar as regras do WAF, o que pode aumentar a dificuldade de contorná-las. Se você encontrar problemas, consulte a documentação ou o suporte do CapSolver. Diferentes desafios podem exigir estratégias diferentes.

Ver mais

aws wafApr 21, 2026

AWS WAF vs Cloudflare: Resolução de CAPTCHA para automação (Guia de 2026)

Compare o AWS WAF vs desafios de CAPTCHA do Cloudflare. Aprenda como resolver o AWS WAF e o Cloudflare Turnstile para automação web com altas taxas de sucesso usando o CapSolver.

Adélia Cruz
Adélia Cruz
aws wafMar 24, 2026

Como resolver o CAPTCHA do Amazon AWS WAF na Automação de Navegador

Domine a resolução de desafios CAPTCHA do Amazon AWS WAF na automação de navegador com estratégias especializadas. Aprenda a integrar o CapSolver para fluxos de automação sem interrupções e eficientes. Este guia aborda soluções baseadas em tokens e em classificação.

Índice

Nikolai Smirnov
Nikolai Smirnov
aws wafSep 14, 2023

Como resolver o AWS Captcha / Desafio com PHP: Um Guia Completo

Um guia detalhado em PHP para resolver o CAPTCHA e o desafio do AWS WAF para raspagem e automação confiáveis.

Adélia Cruz
Adélia Cruz
aws wafJul 12, 2023

Como resolver o token de Captcha do AWS WAF

Este blog explica como você pode resolver o aws waf captcha de forma rápida, barata e fácil usando CapSolver

Adélia Cruz
Adélia Cruz