Como resolver captcha no CrewAI com integração CapSolver

Adélia Cruz
Neural Network Developer
23-Dec-2025
TL;DR: Os fluxos de trabalho do CrewAI frequentemente encontram CAPTCHA; integrar o CapSolver permite que scripts automatizados os resolvam de forma eficiente.

Introdução
Ao automatizar tarefas com o CrewAI, como raspagem de web ou navegação, os CAPTCHAs podem facilmente impedir seu fluxo de trabalho. Esses desafios são comuns ao acessar sites protegidos e podem interromper até scripts de automação bem projetados.
O CapSolver oferece uma maneira confiável de lidar com CAPTCHAs, permitindo que o CrewAI continue suas tarefas sem intervenção manual. Ao integrar o CapSolver, você pode otimizar a navegação automatizada e coleta de dados, mantendo-se compatível com as proteções dos sites.
O que é CrewAI?
CrewAI é um framework Python ágil e rápido para construir sistemas de agentes autônomos de IA. Desenvolvido do zero — totalmente independente do LangChain ou outros frameworks de agentes — o CrewAI oferece tanto facilidade de uso de alto nível quanto capacidades de personalização granular.
Principais Funcionalidades do CrewAI
- Colaboração entre Múltiplos Agentes: Crie equipes de agentes de IA que trabalham juntos de forma autônoma com tomada de decisão natural e delegação dinâmica de tarefas
- Fluxos de Trabalho Baseados em Eventos (Flows): Controle de execução preciso com gerenciamento de caminho granular, consistência de estado e ramificação condicional
- Design Independente: Sem dependências de frameworks externos, construído para velocidade com demandas mínimas de recursos
- Pronto para Produção: Projetado com padrões de confiabilidade e escalabilidade empresarial
- Comunidade Ampliada: Mais de 100.000 desenvolvedores certificados por meio de treinamento comunitário
Arquitetura Principal
O CrewAI opera em dois paradigmas complementares:
| Componente | Descrição |
|---|---|
| Equipes | Equipes de agentes multiplas que colaboram de forma autônoma, permitindo resolução de problemas flexível com papéis especializados |
| Fluxos | Fluxos de trabalho baseados em eventos que oferecem controle preciso de execução para lógica de negócios complexa |
O que é CapSolver?
CapSolver é um serviço líder de resolução de CAPTCHA que fornece soluções baseadas em IA para contornar diversos desafios de CAPTCHA. Com suporte a vários tipos de CAPTCHA e tempos de resposta rápidos, o CapSolver se integra de forma suave em fluxos automatizados.
Tipos de CAPTCHA Suportados
- reCAPTCHA v2 (Imagem & Invisible)
- reCAPTCHA v3
- Cloudflare Turnstile
- Cloudflare Challenge (5s)
- AWS WAF
- E muitos mais...
Por que Integrar o CapSolver com o CrewAI?
Ao construir agentes do CrewAI que interagem com sites — seja para coleta de dados, testes automatizados ou agregação de conteúdo — os desafios de CAPTCHA tornam-se um obstáculo significativo. Aqui está o porquê da integração importar:
- Fluxos de Trabalho dos Agentes Ininterruptos: Os agentes podem completar suas tarefas sem intervenção manual
- Automação Escalável: Lidar com múltiplos desafios de CAPTCHA em operações de agentes concorrentes
- Custo-Efetivo: Pague apenas pelos CAPTCHAs resolvidos com sucesso
- Altas Taxas de Sucesso: Precisão líder do setor para todos os tipos de CAPTCHA suportados
Instalação
Primeiro, instale os pacotes necessários:
bash
pip install crewai
pip install 'crewai[tools]'
pip install requests
Criando uma Ferramenta Personalizada do CapSolver para o CrewAI
O CrewAI permite criar ferramentas personalizadas que os agentes podem usar para completar suas tarefas. Aqui está como criar uma ferramenta do CapSolver para lidar com desafios de CAPTCHA:
Implementação Básica da Ferramenta do CapSolver
python
import requests
import time
from crewai.tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
CAPSOLVER_API_KEY = "SUA_CHAVE_API_DO_CAPSOLVER"
class CaptchaSolverInput(BaseModel):
"""Esquema de entrada para a ferramenta CaptchaSolver."""
website_url: str = Field(..., description="A URL do site com CAPTCHA")
website_key: str = Field(..., description="A chave do site do CAPTCHA")
captcha_type: str = Field(default="ReCaptchaV2TaskProxyLess", description="Tipo de CAPTCHA a ser resolvido")
class CaptchaSolverTool(BaseTool):
name: str = "captcha_solver"
description: str = "Resolve desafios de CAPTCHA usando a API do CapSolver. Suporta reCAPTCHA v2, v3, Turnstile e mais."
args_schema: Type[BaseModel] = CaptchaSolverInput
def _run(self, website_url: str, website_key: str, captcha_type: str = "ReCaptchaV2TaskProxyLess") -> str:
# Criar tarefa
create_task_url = "https://api.capsolver.com/createTask"
task_payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": captcha_type,
"websiteURL": website_url,
"websiteKey": website_key
}
}
response = requests.post(create_task_url, json=task_payload)
result = response.json()
if result.get("errorId") != 0:
return f"Erro ao criar tarefa: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Verificar resultado
get_result_url = "https://api.capsolver.com/getTaskResult"
for _ in range(60): # Máximo de 60 tentativas
time.sleep(2)
result_payload = {
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
response = requests.post(get_result_url, json=result_payload)
result = response.json()
if result.get("status") == "ready":
solution = result.get("solution", {})
return solution.get("gRecaptchaResponse") or solution.get("token")
elif result.get("status") == "failed":
return f"Tarefa falhou: {result.get('errorDescription')}"
return "Tempo esgotado ao esperar a solução do CAPTCHA"
Resolvendo Diferentes Tipos de CAPTCHA
Resolvedor de reCAPTCHA v2
python
import requests
import time
from crewai.tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
CAPSOLVER_API_KEY = "SUA_CHAVE_API_DO_CAPSOLVER"
class ReCaptchaV2Input(BaseModel):
"""Esquema de entrada para o resolvedor de reCAPTCHA v2."""
website_url: str = Field(..., description="A URL do site com reCAPTCHA v2")
website_key: str = Field(..., description="A chave do site do reCAPTCHA")
class ReCaptchaV2Tool(BaseTool):
name: str = "recaptcha_v2_solver"
description: str = "Resolve desafios de reCAPTCHA v2 usando o CapSolver"
args_schema: Type[BaseModel] = ReCaptchaV2Input
def _run(self, website_url: str, website_key: str) -> str:
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key
}
}
return self._solve_captcha(payload)
def _solve_captcha(self, payload: dict) -> str:
# Criar tarefa
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Erro: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Verificar resultado
for attempt in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
if result.get("status") == "failed":
return f"Falha: {result.get('errorDescription')}"
return "Tempo esgotado ao esperar a solução"
Resolvedor de reCAPTCHA v3
python
import requests
import time
from crewai.tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
CAPSOLVER_API_KEY = "SUA_CHAVE_API_DO_CAPSOLVER"
class ReCaptchaV3Input(BaseModel):
"""Esquema de entrada para o resolvedor de reCAPTCHA v3."""
website_url: str = Field(..., description="A URL do site com reCAPTCHA v3")
website_key: str = Field(..., description="A chave do site do reCAPTCHA")
page_action: str = Field(default="submit", description="O parâmetro de ação para reCAPTCHA v3")
class ReCaptchaV3Tool(BaseTool):
name: str = "recaptcha_v3_solver"
description: str = "Resolve desafios de reCAPTCHA v3 com verificação baseada em pontuação"
args_schema: Type[BaseModel] = ReCaptchaV3Input
def _run(
self,
website_url: str,
website_key: str,
page_action: str = "submit"
) -> str:
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV3TaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key,
"pageAction": page_action
}
}
# Criar tarefa
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Erro: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Verificar resultado
for attempt in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
if result.get("status") == "failed":
return f"Falha: {result.get('errorDescription')}"
return "Tempo esgotado ao esperar a solução"
Resolvedor de Cloudflare Turnstile
python
import requests
import time
from crewai.tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
CAPSOLVER_API_KEY = "SUA_CHAVE_API_DO_CAPSOLVER"
class TurnstileInput(BaseModel):
"""Esquema de entrada para o resolvedor de Turnstile."""
website_url: str = Field(..., description="A URL do site com Turnstile")
website_key: str = Field(..., description="A chave do site do widget Turnstile")
class TurnstileTool(BaseTool):
name: str = "turnstile_solver"
description: str = "Resolve desafios de Cloudflare Turnstile"
args_schema: Type[BaseModel] = TurnstileInput
def _run(self, website_url: str, website_key: str) -> str:
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key
}
}
# Criar tarefa
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Erro: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Verificar resultado
for attempt in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["token"]
if result.get("status") == "failed":
return f"Falha: {result.get('errorDescription')}"
return "Tempo esgotado ao esperar a solução"
Resolvedor de Desafio Cloudflare (5s)
python
import requests
import time
from crewai.tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
CAPSOLVER_API_KEY = "SUA_CHAVE_API_DO_CAPSOLVER"
class CloudflareChallengeInput(BaseModel):
"""Esquema de entrada para o resolvedor de desafio Cloudflare."""
website_url: str = Field(..., description="A URL da página protegida")
proxy: str = Field(..., description="Proxy no formato: http://user:pass@ip:port")
class CloudflareChallengeTool(BaseTool):
name: str = "cloudflare_challenge_solver"
description: str = "Resolve páginas de desafio Cloudflare de 5 segundos"
args_schema: Type[BaseModel] = CloudflareChallengeInput
def _run(self, website_url: str, proxy: str) -> dict:
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "AntiCloudflareTask",
"websiteURL": website_url,
"proxy": proxy
}
}
# Criar tarefa
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Erro: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Verificar resultado
for attempt in range(60):
time.sleep(3)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return {
"cookies": result["solution"]["cookies"],
"user_agent": result["solution"]["userAgent"]
}
if result.get("status") == "failed":
return f"Falha: {result.get('errorDescription')}"
return "Tempo esgotado ao esperar a solução"
Como Enviar Tokens de CAPTCHA
Cada tipo de CAPTCHA requer um método de envio diferente:
reCAPTCHA v2/v3 - Injeção de Token
Para o reCAPTCHA, injete o token em uma área de texto oculta e envie o formulário:
python
from selenium import webdriver
from selenium.webdriver.common.by import By
def submit_recaptcha_token(driver, token: str):
"""Injetar token de reCAPTCHA e enviar"""
# Tornar a área de texto oculta visível e definir o token
recaptcha_response = driver.find_element(By.ID, "g-recaptcha-response")
driver.execute_script("arguments[0].style.display = 'block';", recaptcha_response)
recaptcha_response.clear()
recaptcha_response.send_keys(token)
# Enviar o formulário
form = driver.find_element(By.TAG_NAME, "form")
form.submit()
Turnstile - Injeção de Token
Para o Turnstile, defina o token em um campo oculto:
python
def submit_turnstile_token(driver, token: str):
"""Injetar token de Turnstile e enviar"""
# Definir token no campo oculto
turnstile_input = driver.find_element(By.NAME, "cf-turnstile-response")
driver.execute_script("arguments[0].value = arguments[1];", turnstile_input, token)
# Enviar o formulário
form = driver.find_element(By.TAG_NAME, "form")
form.submit()
Desafio Cloudflare - Usar Cookies
Para o Desafio Cloudflare (5s), o CapSolver retorna cookies e agente de usuário em vez de um token. Use-os em suas solicitações:
python
def submit_cloudflare_cookies(driver, cookies: dict, user_agent: str):
"""Usar cookies e agente de usuário para bypassar Cloudflare"""
# Adicionar cookies
driver.delete_all_cookies()
for name, value in cookies.items():
driver.add_cookie({'name': name, 'value': value})
# Definir agente de usuário
driver.execute_cdp_cmd("Network.setUserAgentOverride", {"userAgent": user_agent})
# Recarregar a página
driver.refresh()
import requests
def acessar_pagina_protegida_cloudflare(url: str, cf_solution: dict):
"""
Use a solução do desafio do Cloudflare para acessar a página protegida.
cf_solution contém 'cookies' e 'user_agent' do CapSolver.
"""
# Crie uma sessão com os cookies resolvidos
session = requests.Session()
# Defina os cookies da solução do CapSolver
for cookie in cf_solution["cookies"]:
session.cookies.set(cookie["name"], cookie["value"])
# Defina o user agent que foi usado para resolver
headers = {
"User-Agent": cf_solution["user_agent"]
}
# Agora você pode acessar a página protegida
response = session.get(url, headers=headers)
return response.text
### Exemplo Completo de Raspagem
```python
import requests
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
CHAVE_API_CAPSOLVER = "SUA_CHAVE_API_CAPSOLVER"
def resolver_recaptcha(url_website: str, chave_website: str) -> str:
"""Obter token reCAPTCHA do CapSolver"""
payload = {
"clientKey": CHAVE_API_CAPSOLVER,
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": url_website,
"websiteKey": chave_website
}
}
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"Erro: {result.get('errorDescription')}")
task_id = result.get("taskId")
for _ in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CHAVE_API_CAPSOLVER, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
if result.get("status") == "failed":
raise Exception(f"Falha: {result.get('errorDescription')}")
raise Exception("Tempo esgotado")
def raspagem_com_recaptcha(url_alvo: str, site_key: str):
"""Fluxo completo: resolver CAPTCHA → enviar → raspagem"""
driver = webdriver.Chrome()
driver.get(url_alvo)
try:
# 1. Resolver CAPTCHA
token = resolver_recaptcha(url_alvo, site_key)
# 2. Injetar token
campo_recaptcha = driver.find_element(By.ID, "g-recaptcha-response")
driver.execute_script("arguments[0].style.display = 'block';", campo_recaptcha)
campo_recaptcha.clear()
campo_recaptcha.send_keys(token)
# 3. Enviar formulário
driver.find_element(By.TAG_NAME, "form").submit()
# 4. Raspagem de conteúdo
time.sleep(3) # Aguarde o carregamento da página
return driver.page_source
finally:
driver.quit()
Usando a Extensão CapSolver
Para cenários que exigem automação de navegador dentro do CrewAI, você pode utilizar a extensão CapSolver:
-
Baixe a Extensão: Obtenha a extensão CapSolver em capsolver.com
-
Configure com Selenium/Playwright: Carregue a extensão na sua ferramenta de automação de navegador
-
Modo Auto-Resolução: A extensão detecta e resolve CAPTCHAs automaticamente
python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# Configure o Chrome com a extensão CapSolver
chrome_options = Options()
chrome_options.add_extension("caminho/para/extensao_capsolver.crx")
driver = webdriver.Chrome(options=chrome_options)
# A extensão resolverá automaticamente os CAPTCHAs
driver.get("https://exemplo.com/pagina-protegida")
Boas Práticas
1. Tratamento de Erros
python
def resolver_com_retentativa(self, payload: dict, max_retries: int = 3) -> str:
for tentativa in range(max_retries):
try:
resultado = self._resolver_captcha(payload)
if resultado:
return resultado
except Exception as e:
if tentativa == max_retries - 1:
raise
time.sleep(2 ** tentativa) # Backoff exponencial
2. Gerenciamento de Saldo
python
def verificar_saldo() -> float:
response = requests.post(
"https://api.capsolver.com/getBalance",
json={"clientKey": CHAVE_API_CAPSOLVER}
)
return response.json().get("balance", 0)
3. Armazenamento em Cache de Soluções
Para acesso repetido a páginas iguais, cacheie tokens de CAPTCHA quando apropriado:
python
from functools import lru_cache
from datetime import datetime, timedelta
cache_captcha = {}
def obter_token_cachado(url_website: str, chave_website: str) -> str:
chave_cache = f"{url_website}:{chave_website}"
if chave_cache in cache_captcha:
token, timestamp = cache_captcha[chave_cache]
if datetime.now() - timestamp < timedelta(minutos=2):
return token
# Resolver novo CAPTCHA
novo_token = resolver_captcha(url_website, chave_website)
cache_captcha[chave_cache] = (novo_token, datetime.now())
return novo_token
Conclusão
Integrar o CapSolver ao CrewAI libera o potencial total de agentes de IA autônomos para tarefas baseadas na web. Combinando a orquestração de múltiplos agentes do CrewAI com a capacidade líder do mercado de resolução de CAPTCHA do CapSolver, os desenvolvedores podem construir soluções de automação robustas que lidam com os mecanismos de proteção mais desafiadores da web.
Seja para construir pipelines de extração de dados, frameworks de testes automatizados ou agentes inteligentes da web, a combinação CrewAI + CapSolver fornece a confiabilidade e escalabilidade necessárias para ambientes de produção.
Pronto para começar? Registre-se no CapSolver e use o código promocional CREWAI para obter um bônus de 6% em cada recarga!

Perguntas Frequentes
O que é CrewAI?
CrewAI é um framework Python leve e rápido para criar sistemas de agentes de IA autônomos. Ele permite que os desenvolvedores criem equipes de agentes de IA que colaboram para realizar tarefas complexas, com suporte para tomada de decisão autônoma e controle preciso de fluxos de trabalho.
Como o CapSolver se integra ao CrewAI?
O CapSolver se integra ao CrewAI por meio de ferramentas personalizadas. Você cria uma ferramenta que encapsula a API do CapSolver, permitindo que seus agentes de IA resolvam desafios de CAPTCHA automaticamente quando encontrá-los durante operações na web.
Quais tipos de CAPTCHAs o CapSolver pode resolver?
O CapSolver suporta uma ampla gama de tipos de CAPTCHA, incluindo reCAPTCHA v2, reCAPTCHA v3, Cloudflare Turnstile, Cloudflare Challenge, AWS WAF, GeeTest e muitos outros.
Quanto custa o CapSolver?
O CapSolver oferece preços competitivos com base no tipo e volume de CAPTCHAs resolvidos. Visite capsolver.com para detalhes de preços atuais. Use o código CREWAI para obter 6% de bônus em sua primeira recarga.
Posso usar o CapSolver com outros frameworks Python?
Sim! O CapSolver fornece uma API REST que pode ser integrada a qualquer framework Python, incluindo Scrapy, Selenium, Playwright e muito mais.
O CrewAI é gratuito?
Sim, o CrewAI é de código aberto e licenciado sob MIT. O framework é gratuito para uso, embora você possa incorrer em custos com chamadas de API de LLM (como OpenAI) e serviços de resolução de CAPTCHA como o CapSolver.
Como encontrar a chave do site CAPTCHA?
A chave do site geralmente está no código-fonte da página. Procure por:
- reCAPTCHA: atributo data-sitekey ou chamada de grecaptcha.render()
- : atributo data-sitekey
- Turnstile: atributo data-sitekey no widget Turnstile
Declaração de Conformidade: As informações fornecidas neste blog são apenas para fins informativos. A CapSolver está comprometida em cumprir todas as leis e regulamentos aplicáveis. O uso da rede CapSolver para atividades ilegais, fraudulentas ou abusivas é estritamente proibido e será investigado. Nossas soluções de resolução de captcha melhoram a experiência do usuário enquanto garantem 100% de conformidade ao ajudar a resolver dificuldades de captcha durante a coleta de dados públicos. Incentivamos o uso responsável de nossos serviços. Para mais informações, visite nossos Termos de Serviço e Política de Privacidade.
Mais

Mestre MCP: Aumente a Inteligência Artificial em 2026
O Protocolo de Contexto do Modelo (MCP) é o futuro da integração de IA. Aprenda como o MCP padroniza a comunicação entre ferramentas de IA, impulsiona a automação empresarial e aumenta a inteligência da IA em 2026.

Sora Fujimoto
24-Dec-2025

Como resolver Captcha no Crawlee com integração do CapSolver
Um guia prático para resolver reCAPTCHA e Turnstile no Crawlee usando o CapSolver para raspagem estável do Node.js.

Adélia Cruz
24-Dec-2025

Melhores Serviços de Empresas de Proxy que Você Deveria Conhecer
Este blog oferece uma análise aprofundada cinco provedores de serviços de proxy prominentes: ProxyScrape.com, Proxies.gg, Asocks.com, MetaProxies, RushProxy e Ake.net. Cada seção do blog se aprofunda nas ofertas únicas, recursos, preços e benefícios dos serviços individuais, destacando suas forças e especialidades. Dos proxies residenciais e móveis às opções de datacenter, o blog oferece uma visão abrangente do amplo cenário de proxies. Se você é uma empresa em busca de ferramentas de análise de mercado, um indivíduo em busca de privacidade online ou um desenvolvedor que precisa de soluções de raspagem da web, este blog serve como um guia valioso para entender e selecionar o serviço de proxy certo para suas necessidades.

Adélia Cruz
24-Dec-2025

Ferramentas de Raspagem da Web - Explicado
Descubra as melhores ferramentas de raspagem de web para extração eficiente de dados de sites, adequadas tanto para programadores quanto para não programadores, em nosso guia completo

Nikolai Smirnov
23-Dec-2025

Como resolver captcha no CrewAI com integração CapSolver
Integração do CrewAI com o CapSolver permite o tratamento de CAPTCHA sem problemas para reCAPTCHA, Cloudflare Turnstile, AWS WAF e muito mais, melhorando tarefas web automatizadas.

Adélia Cruz
23-Dec-2025

Como Integrar Camoufox com CapSolver para Resolução de CAPTCHA Sem Precedentes
Aprenda como integrar o Camoufox com o CapSolver para contornar o Cloudflare Turnstile e o reCAPTCHA de forma confiável em larga escala.

Adélia Cruz
16-Dec-2025

