CAPSOLVER
Blog
Como usar RestSharp (Biblioteca C#) para Web Scraping

Como Usar RestSharp (Biblioteca C#) para Web Scraping

Logo of CapSolver

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.

RestSharp WebScraping

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:

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:

    bash Copy
    Install-Package RestSharp
  • Instale a biblioteca HtmlAgilityPack para ajudar a analisar o conteúdo HTML:

    bash Copy
    Install-Package HtmlAgilityPack
  • Instale Newtonsoft.Json para lidar com respostas JSON:

    bash Copy
    Install-Package Newtonsoft.Json

Exemplo: Scraping "Quotes to Scrape"

Vamos raspar citações do site Quotes to Scrape usando RestSharp e HtmlAgilityPack.

csharp Copy
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 RestClient com a URL de destino e cria um RestRequest para 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:

    bash Copy
    Install-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 Copy
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:

  1. Método CreateTask:

    • Cliente e Solicitação RestSharp: Inicializa um RestClient e cria um RestRequest para o endpoint createTask com o método POST.
    • Carga Útil da Solicitação: Define os parâmetros necessários, incluindo clientKey, websiteURL, websiteKey e especifica o tipo de tarefa como ReCaptchaV2TaskProxyLess.
    • Execução: Envia a solicitação e analisa a resposta para recuperar o taskId.
  2. Método GetTaskResult:

    • Cliente e Solicitação RestSharp: Inicializa um RestClient e cria um RestRequest para o endpoint getTaskResult com 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.

Exemplo: Resolvendo reCAPTCHA v3 com Capsolver

Nesta seção, demonstraremos como resolver desafios reCAPTCHA v3 usando a API Capsolver e RestSharp.

csharp Copy
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:

  1. Método CreateTask:

    • Cliente e Solicitação RestSharp: Define um RestClient e RestRequest para o endpoint createTask.
    • Carga Útil da Solicitação: Inclui parâmetros adicionais como minScore e pageAction específicos para reCAPTCHA v3.
    • Execução: Envia a solicitação e recupera o taskId.
  2. 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 arquivo robots.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
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.

Cloudflare
Logo of CapSolver

Rajinder Singh

27-Mar-2026

HyperBrowser com CapSolver
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.

AI
Logo of CapSolver

Adélia Cruz

26-Mar-2026

Como resolver CAPTCHA do Amazon AWS WAF na automação de navegadores
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.

AWS WAF
Logo of CapSolver

Nikolai Smirnov

24-Mar-2026

Resolvendo Captchas para Agentes de IA de Monitoramento de Preços: Um Guia Passo a Passo
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.

AI
Logo of CapSolver

Adélia Cruz

24-Mar-2026

Resolva CAPTCHAs com NanoClaw e CapSolver
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.

AI
Logo of CapSolver

Aloísio Vítor

20-Mar-2026

Como resolver o problema ImageToText usando CapSolver e n8n
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

n8n
Logo of CapSolver

Rajinder Singh

18-Mar-2026