• Preç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/All/Como usar HttpClient (biblioteca C#) para web scraping
Sep16, 2024

Como usar HttpClient (biblioteca C#) para web scraping

Aloísio Vítor

Aloísio Vítor

Image Processing Expert

Desafios CAPTCHA, como o Google reCAPTCHA, são comumente usados por sites para bloquear bots e impedir acesso automatizado ao seu conteúdo. Para contornar tais desafios programaticamente, você pode usar serviços como o Capsolver, que oferece soluções baseadas em API para resolver esses CAPTCHAs.

Neste guia, mostraremos como:

  • Raspar sites usando C# HttpClient e HtmlAgilityPack.
  • Resolver desafios reCAPTCHA usando a API Capsolver.

Web Scraping com C# HttpClient

Em C#, a classe HttpClient é comumente usada para enviar solicitações HTTP e receber respostas de sites. Você pode combinar isso com um analisador HTML como HtmlAgilityPack para extrair dados de páginas da web.

Pré-requisitos

  • Instale a biblioteca HtmlAgilityPack usando o Gerenciador de Pacotes NuGet 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: Raspando "Quotes to Scrape"

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

csharp Copy
using System;
using System.Net.Http;
using System.Threading.Tasks;
using HtmlAgilityPack;

class Program
{
    private static readonly HttpClient client = new HttpClient();

    static async Task Main(string[] args)
    {
        string url = "http://quotes.toscrape.com/";

        // Envie uma solicitação GET para a página
        HttpResponseMessage response = await client.GetAsync(url);

        if (response.IsSuccessStatusCode)
        {
            // Analise o conteúdo da página usando o HtmlAgilityPack
            string pageContent = await response.Content.ReadAsStringAsync();
            HtmlDocument htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(pageContent);

            // 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:

  • HttpClient: Envia uma solicitação GET para o site.
  • HtmlAgilityPack: Analisa o conteúdo HTML e extrai citações selecionando elementos com a classe text.

Resolvendo reCAPTCHA v3 & reCaptcha v2 com Capsolver usando HttpClient

Quando um site emprega reCAPTCHA v3 & reCaptcha v2 para segurança, você pode resolver o CAPTCHA usando a API Capsolver. Abaixo está como você pode integrar o Capsolver com HttpClient 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 HttpClient.

csharp Copy
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;

class Program
{
    private static readonly string apiUrl = "https://api.capsolver.com";
    private static readonly string clientKey = "YOUR_API_KEY"; // Substitua pela sua Chave de API do 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 de CAPTCHA
    private static async Task<string> CreateTask()
    {
        using (HttpClient client = new HttpClient())
        {
            // Carga útil da solicitação
            var requestBody = new
            {
                clientKey = clientKey,
                task = new
                {
                    type = "ReCaptchaV2TaskProxyLess", // Tipo de tarefa para reCAPTCHA v3 sem proxy
                    websiteURL = "", // O URL do site para resolver o CAPTCHA
                    websiteKey = "" // Chave do site reCAPTCHA
                }
            };

            // Envie a solicitação para criar a tarefa
            var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");
            HttpResponseMessage response = await client.PostAsync($"{apiUrl}/createTask", content);
            string responseContent = await response.Content.ReadAsStringAsync();

            if (!response.IsSuccessStatusCode)
            {
                throw new Exception("Falha ao criar a tarefa: " + responseContent);
            }

            JObject jsonResponse = JObject.Parse(responseContent);
            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 de CAPTCHA
    private static async Task<string> GetTaskResult(string taskId)
    {
        using (HttpClient client = new HttpClient())
        {
            // Carga útil da solicitação
            var requestBody = new
            {
                clientKey = clientKey,
                taskId = taskId
            };

            var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");

            // Pesquise pelo resultado da tarefa a cada 5 segundos
            while (true)
            {
                HttpResponseMessage response = await client.PostAsync($"{apiUrl}/getTaskResult", content);
                string responseContent = await response.Content.ReadAsStringAsync();

                if (!response.IsSuccessStatusCode)
                {
                    throw new Exception("Falha ao obter o resultado da tarefa: " + responseContent);
                }

                JObject jsonResponse = JObject.Parse(responseContent);
                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, aguardando 5 segundos...");
                await Task.Delay(5000);
            }
        }
    }
}

Explicação:

  1. Método CreateTask:

    • Este método envia uma solicitação POST para o endpoint /createTask do Capsolver para criar uma nova tarefa para resolver um desafio reCAPTCHA v2.
    • A solicitação inclui a clientKey, websiteURL, websiteKey e especifica o tipo de tarefa como ReCaptchaV2TaskProxyLess.
    • O método retorna um taskId, que será usado para recuperar o resultado da tarefa.
  2. Método GetTaskResult:

    • Este método envia uma solicitação POST para o endpoint /getTaskResult para verificar o resultado da tarefa criada anteriormente.
    • Ele fica sondando o status da tarefa a cada 5 segundos até que a tarefa seja concluída (status: ready).
    • Uma vez que a tarefa está pronta, ela retorna 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 HttpClient.

csharp Copy
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;

class Program
{
    private static readonly string apiUrl = "https://api.capsolver.com";
    private static readonly string clientKey = "YOUR_API_KEY"; // Substitua pela sua Chave de API do 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 de CAPTCHA
    private static async Task<string> CreateTask()
    {
        using (HttpClient client = new HttpClient())
        {
            // Carga útil da solicitação
            var requestBody = new
            {
                clientKey = clientKey,
                task = new
                {
                    type = "ReCaptchaV3TaskProxyLess", // Tipo de tarefa para reCAPTCHA v3 sem proxy
                    websiteURL = "", // O URL do site para resolver o CAPTCHA
                    websiteKey = "" // Chave do site reCAPTCHA
                }
            };

            // Envie a solicitação para criar a tarefa
            var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");
            HttpResponseMessage response = await client.PostAsync($"{apiUrl}/createTask", content);
            string responseContent = await response.Content.ReadAsStringAsync();

            if (!response.IsSuccessStatusCode)
            {
                throw new Exception("Falha ao criar a tarefa: " + responseContent);
            }

            JObject jsonResponse = JObject.Parse(responseContent);
            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 de CAPTCHA
    private static async Task<string> GetTaskResult(string taskId)
    {
        using (HttpClient client = new HttpClient())
        {
            // Carga útil da solicitação
            var requestBody = new
            {
                clientKey = clientKey,
                taskId = taskId
            };

            var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");

            // Pesquise pelo resultado da tarefa a cada 5 segundos
            while (true)
            {
                HttpResponseMessage response = await client.PostAsync($"{apiUrl}/getTaskResult", content);
                string responseContent = await response.Content.ReadAsStringAsync();

                if (!response.IsSuccessStatusCode)
                {
                    throw new Exception("Falha ao obter o resultado da tarefa: " + responseContent);
                }

                JObject jsonResponse = JObject.Parse(responseContent);
                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, aguardando 5 segundos...");
                await Task.Delay(5000);
            }
        }
    }
}

Explicação:

  1. Método CreateTask:

    • Este método envia uma solicitação POST para o endpoint /createTask do Capsolver para criar uma nova tarefa para resolver um desafio reCAPTCHA v3.
    • A solicitação inclui a clientKey, websiteURL, websiteKey e especifica o tipo de tarefa como ReCaptchaV3TaskProxyLess.
    • O método retorna um taskId, que será usado para recuperar o resultado da tarefa.
  2. Método GetTaskResult:

    • Este método envia uma solicitação POST para o endpoint /getTaskResult para verificar o resultado da tarefa criada anteriormente.
    • Ele fica sondando o status da tarefa a cada 5 segundos até que a tarefa seja concluída (status: ready).
    • Uma vez que a tarefa está pronta, ela retorna o gRecaptchaResponse, que pode ser usado para contornar o CAPTCHA.

Boas Práticas de Web Scraping em C#

Ao usar ferramentas de web scraping em C#, siga sempre essas boas práticas:

  • Respeite o 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 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 HttpClient para web scraping e Capsolver para resolução de CAPTCHA, você pode automatizar efetivamente 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 do site de destino e os requisitos legais.

Feliz raspando!


Este guia integra o web scraping usando HtmlAgilityPack e demonstra como lidar com desafios reCAPTCHA com Capsolver, usando apenas HttpClient em C#.

Ver mais

May 08, 2026

ReCAPTCHA na Raspagem de E-commerce: Um Guia Priorizando a Conformidade

Aprenda como lidar com o recaptcha durante a raspagem de e-commerce com fluxos de trabalho conformes, diagnósticos, exemplos do CapSolver e controles de risco práticos.

Adélia Cruz
Adélia Cruz
May 08, 2026

Como a Extração de Dados por IA Funciona: Resolução de CAPTCHA, Análise de Modelos de Linguagem de Grande Escala e Pipelines de Dados Estruturados da Web

Aprenda como a extração de dados com IA funciona, desde a raspagem de web e resolução de CAPTCHA até a limpeza de HTML, análise de LLM e geração de JSON estruturado. Explore estratégias de bypass anti-bot, frameworks de extração semântica como AXE e pipelines de raspagem de web com IA escaláveis.

Adélia Cruz

Índice

Adélia Cruz
May 07, 2026

Melhores Frameworks de Agentes de IA para Automação Web e Resolução de CAPTCHA

Compare os melhores frameworks de agentes de inteligência artificial para automação web, solução de CAPTCHA, conformidade e fluxos de trabalho de agentes prontos para produção em 2026.

Adélia Cruz
Adélia Cruz
May 07, 2026

Melhores Bibliotecas Java de Raspagem de Web para Extração Confiável de Dados

Compare os melhores bibliotecas de raspagem de web em Java, incluindo jsoup, Selenium, Playwright para Java, HtmlUnit, Apache Nutch e opções de API.

Adélia Cruz
Adélia Cruz