Como resolver captchas ao realizar web scraping com o Scrapling e o CapSolver

Aloísio Vítor
Image Processing Expert
05-Dec-2025

Pontos-chave
- Scrapling é uma biblioteca poderosa de raspagem de web em Python com recursos embutidos de anti-bot e rastreamento adaptativo de elementos
- CapSolver fornece resolução automat

Pontos-chave
- Scrapling é uma poderosa biblioteca de raspagem web em Python com recursos embutidos de anti-bot e rastreamento adaptativo de elementos
- CapSolver fornece resolução automática de captchas para ReCaptcha v2, v3 e Cloudflare Turnstile com tempos de resolução rápidos (1-20 segundos)
- Combinar o Scrapling com o CapSolver cria uma solução robusta de raspagem que lida com a maioria dos sites protegidos por captchas
- StealthyFetcher adiciona anti-deteção de navegador quando solicitações HTTP básicas não são suficientes
- Todos os três tipos de captcha usam o mesmo fluxo de trabalho do CapSolver: criar tarefa → verificar resultados → injetar token
- Código de produção deve incluir tratamento de erros, limitação de taxa e respeito aos termos de serviço do site
Introdução
A raspagem web se tornou uma ferramenta essencial para coleta de dados, pesquisa de mercado e análise de concorrência. No entanto, à medida que as técnicas de raspagem evoluíram, os mecanismos de proteção dos sites também se tornaram mais sofisticados. Entre os obstáculos mais comuns que os raspadores enfrentam estão os captchas - esses desafios irritantes projetados para distinguir humanos de robôs.
Se você já tentou raspagem de um site e foi recebido com uma mensagem "Por favor, verifique se você é humano", sabe a frustração. A boa notícia? Há uma combinação poderosa que pode ajudar: Scrapling para raspagem inteligente e CapSolver para resolução automática de captchas.
Neste guia, vamos mostrar tudo o que você precisa saber para integrar essas ferramentas e raspagem com sucesso sites protegidos por captchas. Seja com o Google ReCaptcha v2, o invisível ReCaptcha v3 ou o Cloudflare Turnstile, temos você coberto.
O que é Scrapling?
Scrapling é uma biblioteca moderna de raspagem web em Python que se descreve como "a primeira biblioteca de raspagem adaptativa que aprende com as mudanças nos sites e evolui com eles". Foi projetado para tornar a extração de dados fácil, enquanto oferece capacidades poderosas de anti-bot.
Principais Funcionalidades
- Rastreamento de Elementos Adaptativo: O Scrapling pode localizar conteúdo mesmo após redesigns do site usando algoritmos de similaridade inteligentes
- Métodos de Busca Múltiplos: Solicitações HTTP com impressão digital TLS, automação de navegador e modo stealth
- Bypass de Anti-Bot: Suporte embutido para contornar Cloudflare e outros sistemas de anti-bot usando Firefox modificado e spoofing de impressão digital
- Alta Performance: Benchmarks de extração de texto mostram ~2ms para 5000 elementos aninhados, significativamente mais rápido que muitas alternativas
- Seleção Flexível: Seletores CSS, XPath, operações de busca estilo BeautifulSoup e pesquisa baseada em texto
- Suporte Assíncrono: Suporte completo a async/await para operações de raspagem concorrentes
Instalação
Para capacidades básicas de análise:
bash
pip install scrapling
Para funcionalidades completas, incluindo automação de navegador:
bash
pip install "scrapling[fetchers]"
scrapling install
Para tudo, incluindo recursos de IA:
bash
pip install "scrapling[all]"
scrapling install
Uso Básico
O Scrapling usa métodos de classe para solicitações HTTP:
python
from scrapling import Fetcher
# Solicitação GET
response = Fetcher.get("https://example.com")
# Solicitação POST com dados
response = Fetcher.post("https://example.com/api", data={"chave": "valor"})
# Acessar resposta
print(response.status) # Código de status HTTP
print(response.body) # Bytes brutos
print(response.body.decode()) # Texto decodificado
O que é CapSolver?
CapSolver é um serviço de resolução de captchas que usa inteligência artificial avançada para resolver automaticamente vários tipos de captchas. Ele fornece uma API simples que se integra perfeitamente com qualquer linguagem de programação ou framework de raspagem.
Aumente seu orçamento de automação instantaneamente!
Use o código de bônus SCRAPLING ao recarregar sua conta no CapSolver para obter um bônus adicional de 6% em cada recarga — especialmente para usuários de integração com Scrapling.
Redimir agora no seu Painel do CapSolver
Tipos de Captcha Suportados
- ReCaptcha v2 (checkbox e invisível)
- ReCaptcha v3 (baseado em pontuação)
- ReCaptcha Enterprise (v2 e v3)
- Cloudflare Turnstile
- AWS WAF Captcha
- E muitos outros...
Obtenha sua Chave de API
- Registre-se no CapSolver
- Navegue até seu painel
- Copie sua chave de API nas configurações da conta
- Adicione fundos à sua conta (preço por resolução)
Pontos de Extremidade da API
O CapSolver usa dois pontos de extremidade principais:
- Criar Tarefa:
POST https://api.capsolver.com/createTask - Obter Resultados:
POST https://api.capsolver.com/getTaskResult
Configurando a Função Auxiliar do CapSolver
Antes de mergulhar nos tipos específicos de captcha, vamos criar uma função auxiliar reutilizável que lida com o fluxo de trabalho da API do CapSolver:
python
import requests
import time
CAPSOLVER_API_KEY = "SUA_CHAVE_DE_API"
def solve_captcha(task_type, website_url, website_key, **kwargs):
"""
Solucionador de captcha genérico usando a API do CapSolver.
Args:
task_type: O tipo de tarefa de captcha (ex: "ReCaptchaV2TaskProxyLess")
website_url: A URL da página com o captcha
website_key: A chave do site para o captcha
**kwargs: Parâmetros adicionais específicos do tipo de captcha
Returns:
dict: A solução contendo o token e outros dados
"""
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": task_type,
"websiteURL": website_url,
"websiteKey": website_key,
**kwargs
}
}
# Criar a tarefa
response = requests.post(
"https://api.capsolver.com/createTask",
json=payload
)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"Falha na criação da tarefa: {result.get('errorDescription')}")
task_id = result.get("taskId")
print(f"Tarefa criada: {task_id}")
# Verificar resultados
max_attempts = 60 # Máximo de 2 minutos de verificação
for attempt in range(max_attempts):
time.sleep(2)
response = requests.post(
"https://api.capsolver.com/getTaskResult",
json={
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
)
result = response.json()
if result.get("status") == "ready":
print(f"Captcha resolvido em {(attempt + 1) * 2} segundos")
return result.get("solution")
if result.get("errorId") != 0:
raise Exception(f"Erro: {result.get('errorDescription')}")
print(f"Esperando... (tentativa {attempt + 1})")
raise Exception("Tempo esgotado: A resolução do captcha demorou demais")
Essa função lida com todo o fluxo de trabalho: criar uma tarefa, verificar resultados e retornar a solução. Usaremos ela ao longo deste guia.
Resolvendo ReCaptcha v2 com Scrapling + CapSolver
O ReCaptcha v2 é o clássico "Não sou um robô" captcha de checkbox. Quando dispar

Pontos-chave
- Scrapling é uma poderosa biblioteca de raspagem web em Python com recursos embutidos de anti-bot e rastreamento adaptativo de elementos
- CapSolver fornece resolução automática de captchas para ReCaptcha v2, v3 e Cloudflare Turnstile com tempos de resolução rápidos (1-20 segundos)
- Combinar o Scrapling com o CapSolver cria uma solução robusta de raspagem que lida com a maioria dos sites protegidos por captchas
- StealthyFetcher adiciona anti-deteção de navegador quando solicitações HTTP básicas não são suficientes
- Todos os três tipos de captcha usam o mesmo fluxo de trabalho do CapSolver: criar tarefa → verificar resultados → injetar token
- Código de produção deve incluir tratamento de erros, limitação de taxa e respeito aos termos de serviço do site
Introdução
A raspagem web se tornou uma ferramenta essencial para coleta de dados, pesquisa de mercado e análise de concorrência. No entanto, à medida que as técnicas de raspagem evoluíram, os mecanismos de proteção dos sites também se tornaram mais sofisticados. Entre os obstáculos mais comuns que os raspadores enfrentam estão os captchas - esses desafios irritantes projetados para distinguir humanos de robôs.
Se você já tentou raspagem de um site e foi recebido com uma mensagem "Por favor, verifique se você é humano", sabe a frustração. A boa notícia? Há uma combinação poderosa que pode ajudar: Scrapling para raspagem inteligente e CapSolver para resolução automática de captchas.
Neste guia, vamos mostrar tudo o que você precisa saber para integrar essas ferramentas e raspagem com sucesso sites protegidos por captchas. Seja com o Google ReCaptcha v2, o invisível ReCaptcha v3 ou o Cloudflare Turnstile, temos você coberto.
O que é Scrapling?
Scrapling é uma biblioteca moderna de raspagem web em Python que se descreve como "a primeira biblioteca de raspagem adaptativa que aprende com as mudanças nos sites e evolui com eles". Foi criado para tornar a extração de dados fácil, enquanto oferece capacidades poderosas de anti-bot.
Principais Funcionalidades
- Rastreamento de Elementos Adaptativo: O Scrapling pode localizar conteúdo mesmo após redesigns do site usando algoritmos de similaridade inteligentes
- Métodos de Busca Múltiplos: Solicitações HTTP com impressão digital TLS, automação de navegador e modo stealth
- Bypass de Anti-Bot: Suporte embutido para contornar Cloudflare e outros sistemas de anti-bot usando Firefox modificado e spoofing de impressão digital
- Alta Performance: Benchmarks de extração de texto mostram ~2ms para 5000 elementos aninhados, significativamente mais rápido que muitas alternativas
- Seleção Flexível: Seletores CSS, XPath, operações de busca estilo BeautifulSoup e pesquisa baseada em texto
- Suporte Assíncrono: Suporte completo a async/await para operações de raspagem concorrentes
Instalação
Para capacidades básicas de análise:
bash
pip install scrapling
Para funcionalidades completas, incluindo automação de navegador:
bash
pip install "scrapling[fetchers]"
scrapling install
Para tudo, incluindo recursos de IA:
bash
pip install "scrapling[all]"
scrapling install
Uso Básico
O Scrapling usa métodos de classe para solicitações HTTP:
python
from scrapling import Fetcher
# Solicitação GET
response = Fetcher.get("https://example.com")
# Solicitação POST com dados
response = Fetcher.post("https://example.com/api", data={"chave": "valor"})
# Acessar resposta
print(response.status) # Código de status HTTP
print(response.body) # Bytes brutos
print(response.body.decode()) # Texto decodificado
O que é CapSolver?
CapSolver é um serviço de resolução de captchas que usa inteligência artificial avançada para resolver automaticamente vários tipos de captchas. Ele fornece uma API simples que se integra perfeitamente com qualquer linguagem de programação ou framework de raspagem.
Aumente seu orçamento de automação instantaneamente!
Use o código de bônus SCRAPLING ao recarregar sua conta no CapSolver para obter um bônus adicional de 6% em cada recarga — especialmente para usuários de integração com Scrapling.
Redimir agora no seu Painel do CapSolver
Tipos de Captcha Suportados
- ReCaptcha v2 (checkbox e invisível)
- ReCaptcha v3 (baseado em pontuação)
- ReCaptcha Enterprise (v2 e v3)
- Cloudflare Turnstile
- AWS WAF Captcha
- E muitos outros...
Obtenha sua Chave de API
- Registre-se no CapSolver
- Navegue até seu painel
- Copie sua chave de API nas configurações da conta
- Adicione fundos à sua conta (preço por resolução)
Pontos de Extremidade da API
O CapSolver usa dois pontos de extremidade principais:
- Criar Tarefa:
POST https://api.capsolver.com/createTask - Obter Resultados:
POST https://api.capsolver.com/getTaskResult
Configurando a Função Auxiliar do CapSolver
Antes de mergulhar nos tipos específicos de captcha, vamos criar uma função auxiliar reutilizável que lida com o fluxo de trabalho da API do CapSolver:
python
import requests
import time
CAPSOLVER_API_KEY = "SUA_CHAVE_DE_API"
def solve_captcha(task_type, website_url, website_key, **kwargs):
"""
Solucionador de captcha genérico usando a API do CapSolver.
Args:
task_type: O tipo de tarefa de captcha (ex: "ReCaptchaV2TaskProxyLess")
website_url: A URL da página com o captcha
website_key: A chave do site para o captcha
**kwargs: Parâmetros adicionais específicos do tipo de captcha
Returns:
dict: A solução contendo o token e outros dados
"""
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": task_type,
"websiteURL": website_url,
"websiteKey": website_key,
**kwargs
}
}
# Criar a tarefa
response = requests.post(
"https://api.capsolver.com/createTask",
json=payload
)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"Falha na criação da tarefa: {result.get('errorDescription')}")
task_id = result.get("taskId")
print(f"Tarefa criada: {task_id}")
# Verificar resultados
max_attempts = 60 # Máximo de 2 minutos de verificação
for attempt in range(max_attempts):
time.sleep(2)
response = requests.post(
"https://api.capsolver.com/getTaskResult",
json={
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
)
result = response.json()
if result.get("status") == "ready":
print(f"Captcha resolvido em {(attempt + 1) * 2} segundos")
return result.get("solution")
if result.get("errorId") != 0:
raise Exception(f"Erro: {result.get('errorDescription')}")
print(f"Esperando... (tentativa {attempt + 1})")
raise Exception("Tempo esgotado: A resolução do captcha demorou demais")
Essa função lida com todo o fluxo de trabalho: criar uma tarefa, verificar resultados e retornar a solução. Usaremos ela ao longo deste guia.
Resolvendo ReCaptcha v2 com Scrapling + CapSolver
O ReCaptcha v2 é o clássico "Não sou um robô" captcha de checkbox. Quando acionado, ele pode pedir aos usuários que identifiquem objetos em imagens (semáforos, faixas de pedestres, etc.). Para raspadores, precisamos resolver isso de forma programática.
Como o ReCaptcha v2 Funciona
- O site carrega um script ReCaptcha com uma chave de site única
- Quando submetido, o script gera um token g-recaptcha-response
- O site envia esse token para o Google para verificação
- O Google confirma se o captcha foi resolvido corretamente
Encontrando a Chave de Site
A chave de site geralmente está no HTML da página:
html
<div class="g-recaptcha" data-sitekey="6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"></div>
Ou em uma tag de script:
html
<script src="https://www.google.com/recaptcha/api.js?render=6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"></script>
Implementação
python
from scrapling import Fetcher
def scrape_with_recaptcha_v2(target_url, site_key, form_url=None):
"""
Raspagem de uma página protegida por ReCaptcha v2.
Args:
target_url: A URL da página com o captcha
site_key: A chave de site do ReCaptcha
form_url: A URL para submeter o formulário (padrão para target_url)
Returns:
A resposta da página protegida
"""
# Resolver o captcha usando o CapSolver
print("Resolvendo ReCaptcha v2...")
solution = solve_captcha(
task_type="ReCaptchaV2TaskProxyLess",
website_url=target_url,
website_key=site_key
)
captcha_token = solution["gRecaptchaResponse"]
print(f"Obtido token: {captcha_token[:50]}...")
# Submeter o formulário com o token de captcha usando o Scrapling
# Nota: Use Fetcher.post() como método de classe (não método de instância)
submit_url = form_url or target_url
response = Fetcher.post(
submit_url,
data={
"g-recaptcha-response": captcha_token,
# Adicione quaisquer outros campos de formulário necessários pelo site
}
)
return response
# Exemplo de uso
if __name__ == "__main__":
url = "https://example.com/pagina-protegida"
site_key = "6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"
result = scrape_with_recaptcha_v2(url, site_key)
print(f"Status: {result.status}")
print(f"Comprimento do conteúdo: {len(result.body)}") # Use .body para bytes brutos
ReCaptcha v2 Invisível
Para o ReCaptcha v2 Invisível (sem checkbox, acionado na submissão do formulário), adicione o parâmetro isInvisible:
python
solution = solve_captcha(
task_type="ReCaptchaV2TaskProxyLess",
website_url=target_url,
website_key=site_key,
isInvisible=True
)
Versão Enterprise
Para o ReCaptcha v2 Enterprise, use um tipo de tarefa diferente:
python
solution = solve_captcha(
task_type="ReCaptchaV2EnterpriseTaskProxyLess",
website_url=target_url,
website_key=site_key,
enterprisePayload={
"s": "valor_s_se_necessário"
}
)
Resolvendo ReCaptcha v3 com Scrapling + CapSolver
O ReCaptcha v3 é diferente do v2 — ele roda em segundo plano e atribui uma pontuação (0,0 a 1,0) com base no comportamento do usuário. Uma pontuação mais próxima de 1,0 indica atividade provavelmente humana.
Diferenças Chave em Relação ao v2
| Aspecto | ReCaptcha v2 | ReCaptcha v3 |
|---|---|---|
| Interação do Usuário | Checkbox/Desafios de Imagem | Nenhum (invisível) |
| Saída | Pass/Fail | Pontuação (0,0-1,0) |
| Parâmetro de Ação | Não necessário | Necessário |
| Quando usar | Formulários, logins | Todos os carregamentos de página |
Encontrando o Parâmetro de Ação
A ação é especificada no JavaScript do site:
javascript
grecaptcha.execute('6LcxxxxxxxxxxxxxxxxABCD', {action: 'submit'})
Ações comuns incluem: submit, login, register, homepage, contact.
Implementação
python
from scrapling import Fetcher
def scrape_with_recaptcha_v3(target_url, site_key, page_action="submit", min_score=0.7):
"""
Raspagem de uma página protegida pelo ReCaptcha v3.
Args:
target_url: A URL da página com o captcha
site_key: A chave de site do ReCaptcha
page_action: O parâmetro de ação (encontrado em grecaptcha.execute)
min_score: Pontuação mínima solicitada (0,1-0,9)
Returns:
A resposta da página protegida
"""
print(f"Resolvendo ReCaptcha v3 (ação: {page_action})...")
solution = solve_captcha(
task_type="ReCaptchaV3TaskProxyLess",
website_url=target_url,
website_key=site_key,
pageAction=page_action
)
captcha_token = solution["gRecaptchaResponse"]
print(f"Obtido token com pontuação: {solution.get('score', 'N/A')}")
# Submeter a solicitação com o token usando o método de classe do Scrapling
response = Fetcher.post(
target_url,
data={
"g-recaptcha-response": captcha_token,
},
headers={
"User-Agent": solution.get("userAgent", "Mozilla/5.0")
}
)
return response
# Exemplo de uso
if __name__ == "__main__":
url = "https://example.com/api/dados"
site_key = "6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"
result = scrape_with_recaptcha_v3(url, site_key, page_action="obterDados")
print(f"Resposta: {result.body.decode()[:200]}") # Use .body para conteúdo
ReCaptcha v3 Enterprise
python
solution = solve_captcha(
task_type="ReCaptchaV3EnterpriseTaskProxyLess",
website_url=target_url,
website_key=site_key,
pageAction=page_action,
enterprisePayload={
"s": "parâmetro_s_opcional"
}
)
Resolvendo Cloudflare Turnstile com Scrapling + CapSolver
O Cloudflare Turnstile é uma alternativa mais recente ao captcha tradicional, projetada como uma "solução amigável ao usuário, preservando a privacidade" para substituir os captchas tradicionais. Ele está cada vez mais presente em sites que usam o Cloudflare.
Entendendo o Turnstile
O Turnstile vem em três modos:
- Gerenciado: Mostra um widget apenas quando necessário
- Não Interativo: Funciona sem interação do usuário
- Invisível: Totalmente invisível para os usuários
Boa notícia? O CapSolver lida com todos os três automaticamente.
Encontrando a Chave de Site
Procure o Turnstile no HTML da página:
html
<div class="cf-turnstile" data-sitekey="0x4xxxxxxxxxxxxxxxxxxxxxxxxxx"></div>
Ou no JavaScript:
javascript
turnstile.render('#container', {
sitekey: '0x4xxxxxxxxxxxxxxxxxxxxxxxxxx',
callback: function(token) { ... }
});
Implementação
python
from scrapling import Fetcher
def scrape_with_turnstile(target_url, site_key, action=None, cdata=None):
"""
Raspagem de uma página protegida pelo Cloudflare Turnstile.
Args:
target_url: A URL da página com o captcha
site_key: A chave de site do Turnstile (começa com 0x4...)
action: Parâmetro de ação opcional
cdata: Parâmetro cdata opcional
Returns:
A resposta da página protegida
"""
print("Resolvendo Cloudflare Turnstile...")
# Construir metadados se fornecido
metadata = {}
if action:
metadata["action"] = action
if cdata:
metadata["cdata"] = cdata
task_params = {
"task_type": "AntiTurnstileTaskProxyLess",
"website_url": target_url,
"website_key": site_key,
}
if metadata:
task_params["metadata"] = metadata
solution = solve_captcha(**task_params)
turnstile_token = solution["token"]
user_agent = solution.get("userAgent", "")
print(f"Obtido token do Turnstile: {turnstile_token[:50]}...")
# Submeter com o token usando o método de classe do Scrapling
headers = {}
if user_agent:
headers["User-Agent"] = user_agent
response = Fetcher.post(
target_url,
data={
"cf-turnstile-response": turnstile_token,
},
headers=headers
)
return response
# Exemplo de uso
if __name__ == "__main__":
url = "https://example.com/protected"
site_key = "0x4AAAAAAAxxxxxxxxxxxxxx"
result = scrape_with_turnstile(url, site_key)
print(f"Sucesso! Obteve {len(result.body)} bytes") # Use .body para conteúdo
Turnstile com Action e CData
Alguns implementações exigem parâmetros adicionais:
python
solution = solve_captcha(
task_type="AntiTurnstileTaskProxyLess",
website_url=target_url,
website_key=site_key,
metadata={
"action": "login",
"cdata": "session_id_ou_dados_customizados"
}
)
Usando o StealthyFetcher para Proteção Anti-Bot Avançada
Às vezes, requisições HTTP básicas não são suficientes. Alguns sites usam detecção de bots sofisticada que verifica:
- Impressões digitais do navegador
- Execução de JavaScript
- Movimentos do mouse e timing
- Impressões digitais TLS
- Cabeçalhos de requisição
O StealthyFetcher do Scrapling fornece proteção contra bots de nível de navegador usando um motor de navegador real com modificações de stealth.
O que é o StealthyFetcher?
O StealthyFetcher usa um navegador Firefox modificado com:
- Impressões digitais reais do navegador
- Capacidades de execução de JavaScript
- Tratamento automático de desafios do Cloudflare
- Falsificação de impressões digitais TLS
- Gerenciamento de cookies e sessões
Quando usar o StealthyFetcher
| Cenário | Use Fetcher | Use StealthyFetcher |
|---|---|---|
| Formulários simples com captcha | Sim | Não |
| Páginas com muito JavaScript | Não | Sim |
| Múltiplas camadas de proteção contra bots | Não | Sim |
| Velocidade é crítica | Sim | Não |
| Modo "Cloudflare Under Attack" | Não | Sim |
Combinando o StealthyFetcher com o CapSolver
Aqui está como usar ambos juntos para máxima eficácia:
python
from scrapling import StealthyFetcher
import asyncio
async def scrape_with_stealth_and_recaptcha(target_url, site_key, captcha_type="v2"):
"""
Combina as funcionalidades anti-bot do StealthyFetcher com o CapSolver para ReCaptcha.
Args:
target_url: A URL para scraping
site_key: A chave do captcha
captcha_type: "v2" ou "v3"
Returns:
O conteúdo da página após resolver o captcha
"""
# Primeiro, resolva o captcha usando o CapSolver
print(f"Resolvendo ReCaptcha {captcha_type}...")
if captcha_type == "v2":
solution = solve_captcha(
task_type="ReCaptchaV2TaskProxyLess",
website_url=target_url,
website_key=site_key
)
token = solution["gRecaptchaResponse"]
elif captcha_type == "v3":
solution = solve_captcha(
task_type="ReCaptchaV3TaskProxyLess",
website_url=target_url,
website_key=site_key,
pageAction="submit"
)
token = solution["gRecaptchaResponse"]
else:
raise ValueError(f"Tipo de captcha desconhecido: {captcha_type}")
print(f"Obteve token: {token[:50]}...")
# Use o StealthyFetcher para comportamento de navegador
fetcher = StealthyFetcher()
# Navegue até a página
page = await fetcher.async_fetch(target_url)
# Injeta a solução do ReCaptcha usando JavaScript
await page.page.evaluate(f'''() => {{
// Encontre o campo g-recaptcha-response e defina seu valor
let field = document.querySelector('textarea[name="g-recaptcha-response"]');
if (!field) {{
field = document.createElement('textarea');
field.name = "g-recaptcha-response";
field.style.display = "none";
document.body.appendChild(field);
}}
field.value = "{token}";
}}''')
# Encontre e clique no botão de submissão
submit_button = page.css('button[type="submit"], input[type="submit"]')
if submit_button:
await submit_button[0].click()
# Aguarde a navegação
await page.page.wait_for_load_state('networkidle')
# Obtenha o conteúdo final da página
content = await page.page.content()
return content
# Wrapper síncrono para uso mais fácil
def scrape_stealth(target_url, site_key, captcha_type="v2"):
"""Wrapper síncrono para o scraper assíncrono do stealth."""
return asyncio.run(
scrape_with_stealth_and_recaptcha(target_url, site_key, captcha_type)
)
# Exemplo de uso
if __name__ == "__main__":
url = "https://example.com/pagina-altamente-protegida"
site_key = "6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"
content = scrape_stealth(url, site_key, captcha_type="v2")
print(f"Obteve {len(content)} bytes de conteúdo")
Exemplo Completo: Scraping em Múltiplas Páginas com Sessão
python
from scrapling import StealthyFetcher
import asyncio
class StealthScraper:
"""Um scraper que mantém sessão entre múltiplas páginas."""
def __init__(self, api_key):
self.api_key = api_key
self.fetcher = None
async def __aenter__(self):
self.fetcher = StealthyFetcher()
return self
async def __aexit__(self, *args):
if self.fetcher:
await self.fetcher.close()
async def solve_and_access(self, url, site_key, captcha_type="v2"):
"""Resolve o ReCaptcha e acessa a página."""
global CAPSOLVER_API_KEY
CAPSOLVER_API_KEY = self.api_key
# Resolve o ReCaptcha
task_type = f"ReCaptcha{captcha_type.upper()}TaskProxyLess"
solution = solve_captcha(
task_type=task_type,
website_url=url,
website_key=site_key
)
token = solution["gRecaptchaResponse"]
# Navegue e injete o token
page = await self.fetcher.async_fetch(url)
# ... continue com interação na página
return page
# Uso
async def main():
async with StealthScraper("sua_api_key") as scraper:
page1 = await scraper.solve_and_access(
"https://example.com/login",
"site_key_aqui",
"v2"
)
# Sessão é mantida para requisições subsequentes
page2 = await scraper.solve_and_access(
"https://example.com/dashboard",
"outro_site_key",
"v3"
)
asyncio.run(main())
Melhores Práticas & Dicas
1. Limitação de Taxa
Não ataque os sites com muitas requisições. Implemente atrasos entre as requisições:
python
import time
import random
def scrape_polite(urls, min_delay=2, max_delay=5):
"""Scrape com atrasos aleatórios para parecer mais humano."""
results = []
for url in urls:
result = scrape_page(url)
results.append(result)
# Atraso aleatório entre requisições
delay = random.uniform(min_delay, max_delay)
time.sleep(delay)
return results
2. Tratamento de Erros
Sempre trate falhas com cuidado:
python
def robust_solve_captcha(task_type, website_url, website_key, max_retries=3, **kwargs):
"""Resolve captcha com tentativas automáticas."""
for attempt in range(max_retries):
try:
return solve_captcha(task_type, website_url, website_key, **kwargs)
except Exception as e:
print(f"Tentativa {attempt + 1} falhou: {e}")
if attempt < max_retries - 1:
time.sleep(5) # Espere antes de tentar novamente
else:
raise
3. Respeite o robots.txt
Verifique o robots.txt do site antes de fazer scraping:
python
from urllib.robotparser import RobotFileParser
def pode_scrape(url):
"""Verifique se o scraping é permitido pelo robots.txt."""
rp = RobotFileParser()
rp.set_url(f"{url}/robots.txt")
rp.read()
return rp.can_fetch("*", url)
4. Use Proxies para Escalabilidade
Ao fazer scraping em larga escala, rotacione proxies para evitar bloqueios de IP:
python
# O CapSolver suporta tarefas com proxy
solution = solve_captcha(
task_type="ReCaptchaV2Task", # Note: sem "ProxyLess"
website_url=target_url,
website_key=site_key,
proxy="http://user:pass@proxy.example.com:8080"
)
5. Cacheie Soluções Quando Possível
Tokens de captcha geralmente são válidos por 1-2 minutos. Se precisar fazer várias requisições, reutilize o token:
python
import time
class CaptchaCache:
def __init__(self, ttl=120): # TTL padrão de 2 minutos
self.cache = {}
self.ttl = ttl
def get_or_solve(self, key, solve_func):
"""Obtenha o token em cache ou resolva um novo."""
if key in self.cache:
token, timestamp = self.cache[key]
if time.time() - timestamp < self.ttl:
return token
token = solve_func()
self.cache[key] = (token, time.time())
return token
Tabelas de Comparação
Comparação dos Tipos de Captcha
| Funcionalidade | ReCaptcha v2 | ReCaptcha v3 | Turnstile do Cloudflare |
|---|---|---|---|
| Interação do Usuário | Caixa de seleção + desafio possível | Nenhuma | Mínima ou nenhuma |
| Formato da Chave do Site | 6L... |
6L... |
0x4... |
| Campo de Resposta | g-recaptcha-response |
g-recaptcha-response |
cf-turnstile-response |
| Parâmetro de Ação | Não | Sim (necessário) | Opcional |
| Tempo para Resolver | 1-10 segundos | 1-10 segundos | 1-20 segundos |
| Tarefa do CapSolver | ReCaptchaV2TaskProxyLess |
ReCaptchaV3TaskProxyLess |
AntiTurnstileTaskProxyLess |
Comparação dos Fetchers do Scrapling
| Funcionalidade | Fetcher | StealthyFetcher |
|---|---|---|
| Velocidade | Muito rápida | Mais lenta |
| Suporte a JavaScript | Não | Sim |
| Impressão Digital do Navegador | Nenhuma | Firefox real |
| Uso de Memória | Baixo | Maior |
| Bypass do Cloudflare | Não | Sim |
| Ideal Para | Requisições simples | Anti-bot complexo |
Perguntas Frequentes
Q: Quanto custa o CapSolver?
Verifique a página de preços do CapSolver para as taxas atuais.
Q: Como encontrar a chave do site em uma página web?
Procure no código fonte da página (Ctrl+U) por:
- Atributo
data-sitekey - Chamadas JavaScript
grecaptcha.execute - Parâmetro
render=em URLs de scripts do reCaptcha class="cf-turnstile"para Turnstile
Q: E se o token do captcha expirar antes de usá-lo?
Tokens geralmente expiram após 1-2 minutos. Resolva o captcha o mais perto possível da submissão do formulário. Se obtiver erros de validação, resolva novamente com um token novo.
Q: Posso usar o CapSolver com código assíncrono?
Sim! Envolva a função de resolução em um executor assíncrono:
python
import asyncio
async def async_solve_captcha(*args, **kwargs):
loop = asyncio.get_event_loop()
return await loop.run_in_executor(
None,
lambda: solve_captcha(*args, **kwargs)
)
Q: Como lidar com múltiplos ReCaptchas em uma única página?
Resolva cada captcha separadamente e inclua todos os tokens em sua submissão:
python
# Resolva múltiplos ReCaptchas
solution_v2 = solve_captcha("ReCaptchaV2TaskProxyLess", url, key1)
solution_v3 = solve_captcha("ReCaptchaV3TaskProxyLess", url, key2, pageAction="submit")
# Submeta os tokens usando o método da classe Scrapling
response = Fetcher.post(url, data={
"g-recaptcha-response": solution_v2["gRecaptchaResponse"],
"g-recaptcha-response-v3": solution_v3["gRecaptchaResponse"],
})
Conclusão
Combinando Scrapling e CapSolver, você obtém uma solução poderosa para scraping de sites protegidos por captchas. Aqui está um resumo rápido:
- Use o Fetcher do Scrapling para requisições simples onde a velocidade importa
- Use o StealthyFetcher quando enfrentar sistemas anti-bot sofisticados
- Use o CapSolver para resolver ReCaptcha v2, v3 e Turnstile do Cloudflare
- Implemente melhores práticas como limitação de taxa, tratamento de erros e rotação de proxies
Lembre-se de escrapear de forma responsável:
- Respeite os termos de serviço do site
- Não sobrecarregue os servidores com requisições
- Use os dados de forma ética
- Considere contatar os proprietários do site para acesso via API
Pronto para começar a escrapear? Obtenha sua chave de API do CapSolver em capsolver.com e instale o Scrapling com pip install "scrapling[all]".
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

Como resolver CAPTCHAs em Python usando Botasaurus e CapSolver (Guia Completo)
Aprenda a integrar o Botasaurus (framework de raspagem de web em Python) com a API do CapSolver para resolver automaticamente reCAPTCHA v2/v3 e Turnstile.

Adélia Cruz
15-Dec-2025

Lumiproxy: Proxy Premium para Scraping de Web e Coleta de Dados
Neste artigo, mostraremos o que é Lumiproxy e os serviços que eles oferecem.

Ethan Collins
12-Dec-2025

Tabproxy: Bom custo proxy residencial internacional
Neste artigo, vamos mostrar para você o que é o Tabproxy e os serviços que eles oferecem.

Ethan Collins
12-Dec-2025

O que são erros 402, 403, 404 e 429 em raspagem de web? Um Guia Completo
Domine o tratamento de erros de raspagem de web entendendo o que são os erros 402, 403, 404 e 429. Aprenda a corrigir o erro 403 Proibido, implementar soluções para o erro de limitação de taxa 429 e tratar o código de status Payment Required emergente 402.

Lucas Mitchell
12-Dec-2025

Proxies Residenciais IP2World: Soluções Líderes de Proxies IP Globais
Neste artigo, vamos mostrar o que é o IP2World e os serviços que eles oferecem.

Ethan Collins
12-Dec-2025

Web Scraping com Python: 2026 Melhores Táticas
Aprenda as principais táticas de raspagem de web em Python para 2026, incluindo lidar com conteúdo JavaScript dinâmico, gerenciar fluxos de autenticação, resolver CAPTCHAs, identificar armadilhas ocultas, simular comportamento humano, otimizar padrões de requisição e reduzir o uso de recursos em projetos de raspagem em larga escala.

Lucas Mitchell
12-Dec-2025


