Como Usar RestSharp (Biblioteca C#) para Web Scraping

Aloísio Vítor
Image Processing Expert
17-Sep-2024

Web scraping é uma técnica essencial para extrair dados de sites, mas as aplicações web modernas geralmente implementam medidas de segurança, como desafios CAPTCHA, para evitar acesso automatizado. Os desafios CAPTCHA, como o Google reCAPTCHA, são projetados para diferenciar usuários humanos de bots, tornando difícil para scripts automatizados raspar conteúdo de forma eficaz.
Para superar esses obstáculos, os desenvolvedores podem utilizar ferramentas e serviços que simplificam as solicitações HTTP e manipulam a resolução de CAPTCHA. RestSharp é uma biblioteca C# poderosa e fácil de usar que simplifica o processo de fazer solicitações HTTP para APIs RESTful. Quando combinada com um analisador HTML como o HtmlAgilityPack, ela se torna uma solução robusta para tarefas de web scraping.

No entanto, encontrar desafios CAPTCHA durante o scraping pode interromper seu processo de automação. É aí que o Capsolver entra em ação. O Capsolver oferece soluções baseadas em API para resolver CAPTCHAs programaticamente, permitindo que seus scripts de scraping ignorem esses desafios e acessem o conteúdo desejado perfeitamente.
Neste guia abrangente, vamos guiá-lo através de:
- Raspar sites usando RestSharp e HtmlAgilityPack.
- Resolver desafios reCAPTCHA usando a API Capsolver.
Web Scraping com RestSharp
Em C#, RestSharp é uma biblioteca popular para lidar com solicitações HTTP e interagir com APIs RESTful. Ele simplifica muitos aspectos da comunicação HTTP em comparação com o HttpClient integrado. Você pode combinar o RestSharp com um analisador HTML como HtmlAgilityPack para extrair dados de páginas da web.
Pré-requisitos
-
Instale a biblioteca RestSharp usando o Gerenciador de Pacotes NuGet:
bashInstall-Package RestSharp -
Instale a biblioteca HtmlAgilityPack para ajudar a analisar o conteúdo HTML:
bashInstall-Package HtmlAgilityPack -
Instale Newtonsoft.Json para lidar com respostas JSON:
bashInstall-Package Newtonsoft.Json
Exemplo: Scraping "Quotes to Scrape"
Vamos raspar citações do site Quotes to Scrape usando RestSharp e HtmlAgilityPack.
csharp
using System;
using System.Threading.Tasks;
using HtmlAgilityPack;
using RestSharp;
class Program
{
static async Task Main(string[] args)
{
string url = "http://quotes.toscrape.com/";
// Inicialize o cliente RestSharp
var client = new RestClient(url);
// Crie uma solicitação GET
var request = new RestRequest(Method.GET);
// Execute a solicitação
var response = await client.ExecuteAsync(request);
if (response.IsSuccessful)
{
// Analise o conteúdo da página usando HtmlAgilityPack
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(response.Content);
// Encontre todas as citações na página
var quotes = htmlDoc.DocumentNode.SelectNodes("//span[@class='text']");
// Imprima cada citação
foreach (var quote in quotes)
{
Console.WriteLine(quote.InnerText);
}
}
else
{
Console.WriteLine($"Falha ao recuperar a página. Código de Status: {response.StatusCode}");
}
}
}
Explicação:
- Cliente e Solicitação RestSharp: Inicializa um
RestClientcom a URL de destino e cria umRestRequestpara o método GET. - Executando a Solicitação: Envia a solicitação assincronamente e verifica se a resposta é bem-sucedida.
- HtmlAgilityPack: Analisa o conteúdo HTML da resposta e extrai as citações selecionando elementos com a classe
text.
Resolvendo reCAPTCHA v2 e reCAPTCHA v3 com Capsolver usando RestSharp
Quando um site usa reCAPTCHA v2 ou v3 para segurança, você pode resolver o CAPTCHA usando a API Capsolver. Abaixo está como você pode integrar o Capsolver com RestSharp para resolver desafios reCAPTCHA.
Pré-requisitos
-
Newtonsoft.Json é usado para lidar com a análise JSON de respostas do Capsolver:
bashInstall-Package Newtonsoft.Json
Exemplo: Resolvendo reCAPTCHA v2 com Capsolver
Nesta seção, demonstraremos como resolver desafios reCAPTCHA v2 usando a API Capsolver e RestSharp.
csharp
using System;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RestSharp;
class Program
{
private static readonly string apiUrl = "https://api.capsolver.com";
private static readonly string clientKey = "YOUR_API_KEY"; // Substitua pela sua Chave da API Capsolver
static async Task Main(string[] args)
{
try
{
// Passo 1: Crie uma tarefa para resolver reCAPTCHA v2
string taskId = await CreateTask();
Console.WriteLine("ID da Tarefa: " + taskId);
// Passo 2: Recupere o resultado da tarefa
string taskResult = await GetTaskResult(taskId);
Console.WriteLine("Resultado da Tarefa (Token CAPTCHA): " + taskResult);
}
catch (Exception ex)
{
Console.WriteLine("Erro: " + ex.Message);
}
}
// Método para criar uma nova tarefa de resolução CAPTCHA
private static async Task<string> CreateTask()
{
// Inicialize o cliente RestSharp
var client = new RestClient(apiUrl);
// Carga útil da solicitação
var requestBody = new
{
clientKey = clientKey,
task = new
{
type = "ReCaptchaV2TaskProxyLess", // Tipo de tarefa para reCAPTCHA v2 sem proxy
websiteURL = "https://www.example.com", // A URL do site para resolver CAPTCHA
websiteKey = "SITE_KEY_HERE" // Chave do site reCAPTCHA
}
};
// Crie uma solicitação POST
var request = new RestRequest("createTask", Method.POST);
request.AddJsonBody(requestBody);
// Execute a solicitação
var response = await client.ExecuteAsync(request);
if (!response.IsSuccessful)
{
throw new Exception("Falha ao criar a tarefa: " + response.Content);
}
JObject jsonResponse = JObject.Parse(response.Content);
if (jsonResponse["errorId"].ToString() != "0")
{
throw new Exception("Erro ao criar a tarefa: " + jsonResponse["errorDescription"]);
}
// Retorne o ID da tarefa para ser usado na próxima etapa
return jsonResponse["taskId"].ToString();
}
// Método para recuperar o resultado de uma tarefa de resolução CAPTCHA
private static async Task<string> GetTaskResult(string taskId)
{
// Inicialize o cliente RestSharp
var client = new RestClient(apiUrl);
// Carga útil da solicitação
var requestBody = new
{
clientKey = clientKey,
taskId = taskId
};
// Crie uma solicitação POST
var request = new RestRequest("getTaskResult", Method.POST);
request.AddJsonBody(requestBody);
// Sondar o resultado da tarefa a cada 5 segundos
while (true)
{
var response = await client.ExecuteAsync(request);
if (!response.IsSuccessful)
{
throw new Exception("Falha ao obter o resultado da tarefa: " + response.Content);
}
JObject jsonResponse = JObject.Parse(response.Content);
if (jsonResponse["errorId"].ToString() != "0")
{
throw new Exception("Erro ao obter o resultado da tarefa: " + jsonResponse["errorDescription"]);
}
// Se a tarefa estiver pronta, retorne o token CAPTCHA
if (jsonResponse["status"].ToString() == "ready")
{
return jsonResponse["solution"]["gRecaptchaResponse"].ToString();
}
// Espere 5 segundos antes de verificar novamente
Console.WriteLine("A tarefa ainda está sendo processada, esperando 5 segundos...");
await Task.Delay(5000);
}
}
}
Explicação:
-
Método CreateTask:
- Cliente e Solicitação RestSharp: Inicializa um
RestCliente cria umRestRequestpara o endpointcreateTaskcom o método POST. - Carga Útil da Solicitação: Define os parâmetros necessários, incluindo
clientKey,websiteURL,websiteKeye especifica o tipo de tarefa comoReCaptchaV2TaskProxyLess. - Execução: Envia a solicitação e analisa a resposta para recuperar o
taskId.
- Cliente e Solicitação RestSharp: Inicializa um
-
Método GetTaskResult:
- Cliente e Solicitação RestSharp: Inicializa um
RestCliente cria umRestRequestpara o endpointgetTaskResultcom o método POST. - Sondagem: Sondar continuamente o status da tarefa a cada 5 segundos até que ela seja concluída (
status: ready). - Recuperação do Resultado: Uma vez que a tarefa esteja pronta, ela extrai o
gRecaptchaResponse, que pode ser usado para contornar o CAPTCHA.
- Cliente e Solicitação RestSharp: Inicializa um
Exemplo: Resolvendo reCAPTCHA v3 com Capsolver
Nesta seção, demonstraremos como resolver desafios reCAPTCHA v3 usando a API Capsolver e RestSharp.
csharp
using System;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RestSharp;
class Program
{
private static readonly string apiUrl = "https://api.capsolver.com";
private static readonly string clientKey = "YOUR_API_KEY"; // Substitua pela sua Chave da API Capsolver
static async Task Main(string[] args)
{
try
{
// Passo 1: Crie uma tarefa para resolver reCAPTCHA v3
string taskId = await CreateTask();
Console.WriteLine("ID da Tarefa: " + taskId);
// Passo 2: Recupere o resultado da tarefa
string taskResult = await GetTaskResult(taskId);
Console.WriteLine("Resultado da Tarefa (Token CAPTCHA): " + taskResult);
}
catch (Exception ex)
{
Console.WriteLine("Erro: " + ex.Message);
}
}
// Método para criar uma nova tarefa de resolução CAPTCHA
private static async Task<string> CreateTask()
{
// Inicialize o cliente RestSharp
var client = new RestClient(apiUrl);
// Carga útil da solicitação
var requestBody = new
{
clientKey = clientKey,
task = new
{
type = "ReCaptchaV3TaskProxyLess", // Tipo de tarefa para reCAPTCHA v3 sem proxy
websiteURL = "https://www.example.com", // A URL do site para resolver CAPTCHA
websiteKey = "SITE_KEY_HERE", // Chave do site reCAPTCHA
minScore = 0.3, // Pontuação mínima desejada
pageAction = "your_action" // Nome da ação definido no site
}
};
// Crie uma solicitação POST
var request = new RestRequest("createTask", Method.POST);
request.AddJsonBody(requestBody);
// Execute a solicitação
var response = await client.ExecuteAsync(request);
if (!response.IsSuccessful)
{
throw new Exception("Falha ao criar a tarefa: " + response.Content);
}
JObject jsonResponse = JObject.Parse(response.Content);
if (jsonResponse["errorId"].ToString() != "0")
{
throw new Exception("Erro ao criar a tarefa: " + jsonResponse["errorDescription"]);
}
// Retorne o ID da tarefa para ser usado na próxima etapa
return jsonResponse["taskId"].ToString();
}
// Método para recuperar o resultado de uma tarefa de resolução CAPTCHA
private static async Task<string> GetTaskResult(string taskId)
{
// Inicialize o cliente RestSharp
var client = new RestClient(apiUrl);
// Carga útil da solicitação
var requestBody = new
{
clientKey = clientKey,
taskId = taskId
};
// Crie uma solicitação POST
var request = new RestRequest("getTaskResult", Method.POST);
request.AddJsonBody(requestBody);
// Sondar o resultado da tarefa a cada 5 segundos
while (true)
{
var response = await client.ExecuteAsync(request);
if (!response.IsSuccessful)
{
throw new Exception("Falha ao obter o resultado da tarefa: " + response.Content);
}
JObject jsonResponse = JObject.Parse(response.Content);
if (jsonResponse["errorId"].ToString() != "0")
{
throw new Exception("Erro ao obter o resultado da tarefa: " + jsonResponse["errorDescription"]);
}
// Se a tarefa estiver pronta, retorne o token CAPTCHA
if (jsonResponse["status"].ToString() == "ready")
{
return jsonResponse["solution"]["gRecaptchaResponse"].ToString();
}
// Espere 5 segundos antes de verificar novamente
Console.WriteLine("A tarefa ainda está sendo processada, esperando 5 segundos...");
await Task.Delay(5000);
}
}
}
Explicação:
-
Método CreateTask:
- Cliente e Solicitação RestSharp: Define um
RestClienteRestRequestpara o endpointcreateTask. - Carga Útil da Solicitação: Inclui parâmetros adicionais como
minScoreepageActionespecíficos para reCAPTCHA v3. - Execução: Envia a solicitação e recupera o
taskId.
- Cliente e Solicitação RestSharp: Define um
-
Método GetTaskResult:
- Semelhante ao exemplo v2, ele sondar a API Capsolver para o resultado da tarefa e recupera o token CAPTCHA quando a tarefa estiver pronta.
Boas Práticas de Web Scraping em C#
Ao usar ferramentas de web scraping em C#, siga sempre essas boas práticas:
- Respeite
robots.txt: Certifique-se de que o site permite web scraping verificando o arquivorobots.txt. - Limitação de Taxa: Evite fazer muitas solicitações em um curto período de tempo para evitar ser bloqueado pelo site.
- Rotação de Proxy: Use proxies para distribuir solicitações entre vários IPs para evitar ser marcado como um bot.
- Spoof Headers: Simule solicitações semelhantes a navegadores adicionando cabeçalhos personalizados, como
User-Agent, às suas solicitações HTTP.
Conclusão
Usando RestSharp para web scraping e Capsolver para resolução de CAPTCHA, você pode automatizar de forma eficaz as interações com sites que empregam desafios CAPTCHA. Certifique-se sempre de que suas atividades de web scraping estejam em conformidade com os termos de serviço e requisitos legais do site de destino.
Feliz scraping!
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

Corrigir o Erro 1005 do Cloudflare: Guia de Web Scraping e Soluções
Aprenda a corrigir o Erro 1005 do Cloudflare acesso negado durante o web scraping. Descubra soluções como proxies residenciais, fingerprinting de navegador e CapSolver para CAPTCHA. Otimize sua extração de dados.

Rajinder Singh
27-Mar-2026

Como resolver qualquer CAPTCHA no HyperBrowser usando o CapSolver (Guia Completo de Configuração)
Resolva qualquer CAPTCHA no HyperBrowser usando o CapSolver. Automatize reCAPTCHA, Turnstile, AWS WAF e de forma mais fácil.

Adélia Cruz
26-Mar-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.

Nikolai Smirnov
24-Mar-2026

Resolvendo Captchas para Agentes de IA de Monitoramento de Preços: Um Guia Passo a Passo
Aprenda como resolver efetivamente CAPTCHAs para agentes de inteligência artificial de monitoramento de preços com o CapSolver. Este guia passo a passo garante coleta de dados ininterrupta e insights de mercado aprimorados.

Adélia Cruz
24-Mar-2026

Como resolver automaticamente CAPTCHAs com NanoClaw e CapSolver
Guia passo a passo para usar o CapSolver com o NanoClaw para resolver automaticamente reCAPTCHA, Turnstile, AWS WAF e outros CAPTCHAs. Funciona com agentes do Claude AI, sem código e navegadores múltiplos.

Aloísio Vítor
20-Mar-2026

Como resolver o problema ImageToText usando CapSolver e n8n
imagem para texto, solver de captcha, captcha OCR, capsolver, n8n, workflow n8n, automação, API de OCR, automação de captcha, imagem base64, reconhecimento de imagem, OCR com IA, webhook, workflow agendado, automatização de formulários, bypass de captcha, gestão de sessões, captcha sem proxy, OCR instantâneo, reconhecimento de texto

Rajinder Singh
18-Mar-2026

