CAPSOLVER
Blog
Web Scraping em C#: Tutorial Passo a Passo em 2025

Raspagem Web em C#: Tutorial Passo a Passo em 2025

Logo of CapSolver

Lucas Mitchell

Automation Engineer

23-Jan-2025

webscraping, csharp, capsolver

Seu guia amigável para raspar sites, lidar com CAPTCHAs e até tirar screenshots!


Por que Web Scraping em C#?

C# não serve apenas para construir aplicativos ou jogos para Windows — também é uma potência para web scraping! Com bibliotecas como HtmlAgilityPack, Selenium e Puppeteer Sharp, você pode extrair dados, automatizar interações e até resolver CAPTCHAs (sim, realmente). Neste tutorial, usaremos https://www.scrapethissite.com/pages/ como nosso playground. Vamos mergulhar!


Passo 1: Configurando seu Projeto

Primeiro, crie um novo aplicativo de console C#. Em seguida, instale esses pacotes NuGet:

bash Copy
Install-Package HtmlAgilityPack        # Para análise HTML
Install-Package Selenium.WebDriver     # Para automação do navegador
Install-Package PuppeteerSharp         # Para screenshots e scraping avançado
Install-Package Capsolver.SDK          # Para resolução de CAPTCHA

Exemplo 1: Web Scraping Básico

Vamos raspar dados de países de https://www.scrapethissite.com/pages/simple/.

csharp Copy
using HtmlAgilityPack;
using System.Net;

var url = "https://www.scrapethissite.com/pages/simple/";
var client = new WebClient();
client.Headers.Add("User-Agent", "Mozilla/5.0"); // Seja educado!
var html = client.DownloadString(url);

var doc = new HtmlDocument();
doc.LoadHtml(html);

var countries = doc.DocumentNode.SelectNodes("//div[@class='country']");
foreach (var country in countries)
{
    var name = country.SelectSingleNode(".//h3").InnerText.Trim();
    var capital = country.SelectSingleNode(".//span[@class='country-capital']").InnerText.Trim();
    Console.WriteLine($"País: {name}, Capital: {capital}");
}

Isso imprime todos os países e suas capitais. Simples, certo?


Exemplo 2: Lidando com JavaScript com Selenium

Algumas páginas precisam de um navegador real. Vamos raspar a página de exemplo AJAX usando Selenium:

csharp Copy
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

var options = new ChromeOptions();
options.AddArgument("--headless"); // Executar em segundo plano
using var driver = new ChromeDriver(options);

driver.Navigate().GoToUrl("https://www.scrapethissite.com/pages/ajax-javascript/");
var dynamicContent = driver.FindElement(By.CssSelector(".ajax-content")).Text;
Console.WriteLine($"Conteúdo AJAX: {dynamicContent}");

Exemplo 3: Resolvendo CAPTCHAs com Capsolver

Tem um CAPTCHA bloqueando seu caminho? Use Capsolver para contornar o ReCaptchaV2. Veja como:

  1. Cadastre-se no Capsolver, pegue sua chave de API.
  2. Use a API para resolver um CAPTCHA:
csharp Copy
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Text;
using System.Text.Json;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System.Threading;

namespace CapSolverSeleniumExample
{
    class Program
    {
        static async Task Main(string[] args)
        {
            string token = await GetCaptchaToken();
            using var driver = new ChromeDriver();
            driver.Navigate().GoToUrl("https://www.example.com");
            Thread.Sleep(5000);
            driver.ExecuteScript("document.getElementById('g-recaptcha-response').innerHTML = arguments[0];", token);
            var submitButton = driver.FindElement(By.Id("submit-button"));
            submitButton.Click();
            Thread.Sleep(5000);
            driver.Quit();
        }

        static async Task<string> GetCaptchaToken()
        {
            string apiKey = "YOUR_API_KEY";
            string siteKey = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_kl-";
            string siteUrl = "https://www.example.com";
            using var client = new HttpClient();
            var payload = new
            {
                clientKey = apiKey,
                task = new
                {
                    type = "ReCaptchaV3TaskProxyLess",
                    websiteKey = siteKey,
                    websiteURL = siteUrl,
                    pageAction = "login"
                }
            };
            var requestContent = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
            var createTaskResponse = await client.PostAsync("https://api.capsolver.com/createTask", requestContent);
            var createTaskResponseString = await createTaskResponse.Content.ReadAsStringAsync();
            using var createTaskJsonDoc = JsonDocument.Parse(createTaskResponseString);
            var root = createTaskJsonDoc.RootElement;
            if (!root.TryGetProperty("taskId", out var taskIdElement))
            {
                Console.WriteLine("Falha ao criar tarefa: " + createTaskResponseString);
                return null;
            }
            int taskId = taskIdElement.GetInt32();
            while (true)
            {
                await Task.Delay(1000);
                var resultPayload = new { clientKey = apiKey, taskId = taskId };
                var resultContent = new StringContent(JsonSerializer.Serialize(resultPayload), Encoding.UTF8, "application/json");
                var getTaskResponse = await client.PostAsync("https://api.capsolver.com/getTaskResult", resultContent);
                var getTaskResponseString = await getTaskResponse.Content.ReadAsStringAsync();
                using var getTaskJsonDoc = JsonDocument.Parse(getTaskResponseString);
                var resultRoot = getTaskJsonDoc.RootElement;
                if (resultRoot.TryGetProperty("status", out var statusElement))
                {
                    string status = statusElement.GetString();
                    if (status == "ready")
                    {
                        if (resultRoot.TryGetProperty("solution", out var solutionElement) && solutionElement.TryGetProperty("gRecaptchaResponse", out var tokenElement))
                        {
                            return tokenElement.GetString();
                        }
                        return null;
                    }
                    if (status == "failed" || resultRoot.TryGetProperty("errorId", out _))
                    {
                        Console.WriteLine("Resolução falhou! resposta: " + getTaskResponseString);
                        return null;
                    }
                }
            }
        }
    }
}

Funciona perfeitamente com o Selenium para automatizar formulários repletos de CAPTCHA!


Exemplo 4: Tirando Screenshots com Puppeteer Sharp

Quer uma prova visual do seu scraping? Capture uma screenshot:

csharp Copy
using PuppeteerSharp;

await new BrowserFetcher().DownloadAsync();
using var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
using var page = await browser.NewPageAsync();

await page.GoToAsync("https://www.scrapethissite.com/pages/javascript/");
await page.ScreenshotAsync("screenshot.png");

Perfeito para depurar ou arquivar páginas.


Dicas Profissionais para Web Scraping em 2025

  1. Respeite o robots.txt: Verifique https://www.scrapethissite.com/robots.txt primeiro.
  2. Limitação de taxa: Adicione atrasos com Thread.Sleep(2000) para evitar sobrecarregar os servidores.
  3. Rotação de User-Agent: Imite navegadores reais para evitar detecção.
  4. Tratamento de erros: Envolva o código em blocos try-catch para problemas de rede.

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

Reconhecimento de Imagem com IA: Fundamentos e como resolvê-lo
Reconhecimento de Imagem com IA: Conceitos Básicos e como Resolvê-lo

Diga adeus aos problemas com CAPTCHAs de imagem – o CapSolver Vision Engine os resolve de forma rápida, inteligente e sem complicações!

Logo of CapSolver

Adélia Cruz

25-Apr-2025

Melhores agentes de usuário para web scraping & como usá-los
Melhores agentes de usuário para web scraping e como usá-los

Um guia para os melhores agentes de usuário para web scraping e seu uso eficaz para evitar detecção. Explore a importância dos agentes de usuário, seus tipos e como implementá-los para web scraping sem problemas e indetectável.

Logo of CapSolver

Adélia Cruz

07-Mar-2025

Como Resolver o Desafio Cloudflare JS para Web Scraping e Automação
Como Resolver o Desafio Cloudflare JS para Web Scraping e Automação

Aprenda a resolver o desafio JavaScript do Cloudflare para web scraping e automação sem problemas. Descubra estratégias eficazes, incluindo o uso de navegadores headless, rotação de proxies e aproveitando as capacidades avançadas de resolução de CAPTCHA do CapSolver.

Cloudflare
Logo of CapSolver

Aloísio Vítor

05-Mar-2025

Impressão digital TLS do Cloudflare: O que é e como resolvê-la
Impressão digital TLS do Cloudflare: O que é e como resolvê-la

Saiba como o Cloudflare usa impressão digital TLS para segurança, como detecta e bloqueia bots e explore métodos eficazes para resolvê-la para tarefas de web scraping e navegação automatizada.

Logo of CapSolver

Aloísio Vítor

28-Feb-2025

Por que continuo sendo solicitado a verificar que não sou um robô?
Por que continuo sendo solicitado a verificar que não sou um robô?

Saiba por que o Google solicita que você verifique se não é um robô e explore soluções como o uso da API do CapSolver para resolver desafios de CAPTCHA de forma eficiente.

Logo of CapSolver

Ethan Collins

27-Feb-2025

Por que os sites acham que sou um robô? E como resolver isso
Por que os sites acham que sou um robô? E como resolver isso?

Entenda por que sites o marcam como bot e como evitar a detecção. Os principais gatilhos incluem desafios CAPTCHA, IPs suspeitos e comportamento incomum do navegador.

Logo of CapSolver

Adélia Cruz

20-Feb-2025