CAPSOLVER
Blog
Como resolver o CAPTCHA com o Selenium C#

Como resolver o CAPTCHA com o Selenium C#

Logo of CapSolver

Aloísio Vítor

Image Processing Expert

11-Jul-2024

Introdução

CAPTCHA frequentemente representa um obstáculo significativo em tarefas de web scraping e automação. No entanto, com a abordagem correta usando Selenium e C#, é possível lidar e resolver desafios CAPTCHA de forma eficaz. Neste guia, exploraremos o gerenciamento programático de CAPTCHA em sites e demonstraremos o web scraping em um site de exemplo.

Compreendendo CAPTCHA

CAPTCHA, abreviação de Teste de Turing Público Completamente Automatizado para Diferenciar Computadores e Humanos, atua como um porteiro digital na entrada de websites. Ele desafia os usuários com tarefas como decifrar texto distorcido, identificar objetos ou ouvir clipes de áudio entre ruídos. Esses testes são cruciais para proteger serviços online de bots automatizados, garantindo apenas interações genuínas de humanos.

Para uma exploração mais detalhada sobre CAPTCHA e suas variações, você pode conferir este guia abrangente sobre tipos de CAPTCHA e sua eficácia.

Está enfrentando dificuldades repetidas para resolver a irritante CAPTCHA completamente? Descubra a solução automática e sem interrupções com a tecnologia CapSolver de Desbloqueio Automático de Web alimentada por IA!

Reivindique seu Código de Bônus para as principais soluções CAPTCHA; CapSolver: WEBS. Após resgatá-lo, você receberá um bônus extra de 5% após cada recarga, sem limites.

Pré-requisitos

Antes de mergulhar no Selenium e C# para resolver CAPTCHA e web scraping, certifique-se de ter o seguinte:

Configurando o Selenium no Visual Studio

Para começar, crie um novo projeto C# no Visual Studio e adicione o Selenium WebDriver usando o NuGet Package Manager:

powershell Copy
Install-Package Selenium.WebDriver

Além disso, instale o WebDriver para seu navegador preferido. Você pode encontrar drivers específicos como ChromeDriver e FirefoxDriver para download.

Exemplo Básico de Web Scraping

Vamos demonstrar como extrair dados de um site de exemplo usando Selenium em C#:

csharp Copy
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Collections.Generic;

namespace WebScrapingExample
{
    class Program
    {
        static void Main(string[] args)
        {
            IWebDriver driver = new ChromeDriver();
            driver.Navigate().GoToUrl("https://www.scrapethissite.com/pages/simple/");

            var countries = driver.FindElements(By.CssSelector(".country"));
            List<string> countryData = new List<string>();

            foreach (var country in countries)
            {
                var name = country.FindElement(By.CssSelector(".country-name")).Text;
                var capital = country.FindElement(By.CssSelector(".country-capital")).Text;
                var population = country.FindElement(By.CssSelector(".country-population")).Text;
                var area = country.FindElement(By.CssSelector(".country-area")).Text;

                countryData.Add($"Nome: {name}, Capital: {capital}, População: {population}, Área: {area}");
            }

            foreach (var data in countryData)
            {
                Console.WriteLine(data);
            }

            driver.Quit();
        }
    }
}

Lidando com Desafios CAPTCHA

Lidar com CAPTCHA envolve a integração de um serviço de resolução de CAPTCHA como o CapSolver. Aqui está um exemplo básico de como integrá-lo:

Configurando a Integração com API CapSolver

Antes de resolver CAPTCHAs programaticamente, você precisa se inscrever no site da CapSolver e obter uma chave de API.

Integração Passo a Passo com CapSolver

  1. Crie uma Conta: Inscreva-se no site da CapSolver e faça login no seu painel.

  2. Gere uma Chave de API: Navegue até a seção de API no seu painel CapSolver e gere uma chave de API.

Implementando a Resolução de CAPTCHA com CapSolver

Abaixo está uma implementação de exemplo usando CapSolver para resolver um desafio reCAPTCHA v2:

csharp Copy
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;

namespace SolveCaptchaExample
{
    class Program
    {
        static async Task Main(string[] args)
        {
            IWebDriver driver = new ChromeDriver();
            driver.Navigate().GoToUrl("https://www.google.com/recaptcha/api2/demo");

            var siteKey = driver.FindElement(By.CssSelector("div.g-recaptcha")).GetAttribute("data-sitekey");
            var pageUrl = driver.Url;

            var captchaResponse = await SolveCaptcha(siteKey, pageUrl, "sua apiKey");
            await Console.Out.WriteLineAsync(captchaResponse);


            IWebElement recaptchaResponseElement = driver.FindElement(By.Id("g-recaptcha-response"));
            ((IJavaScriptExecutor)driver).ExecuteScript($"arguments[0].value = '{captchaResponse}';", recaptchaResponseElement);

            IWebElement submitButton = driver.FindElement(By.CssSelector("#recaptcha-demo-submit"));
            submitButton.Click();
        }

        static async Task<string> SolveCaptcha(string siteKey, string pageUrl, string apikey)
        {
            var client = new HttpClient();
            var content = new StringContent($"{{\"clientKey\": \"{apikey}\", \"task\": {{\"type\": \"RecaptchaV2TaskProxyless\", \"websiteURL\": \"{pageUrl}\", \"websiteKey\": \"{siteKey}\"}}}}", System.Text.Encoding.UTF8, "application/json");
            var response = await client.PostAsync("https://api.capsolver.com/createTask", content);
            var jsonResponse = await response.Content.ReadAsStringAsync();
            var taskId = JObject.Parse(jsonResponse)["taskId"].ToString();

            string captchaSolution = "";
            while (captchaSolution == "" || captchaSolution.Contains("processing"))
            {
                await Task.Delay(5000);
                var content2 = new StringContent($"{{\"clientKey\": \"{apikey}\", \"taskId\": \"{taskId}\"}}", System.Text.Encoding.UTF8, "application/json");
                var response2 = await client.PostAsync("https://api.capsolver.com/getTaskResult", content2);
                var jsonResponse3 = await response2.Content.ReadAsStringAsync();
                captchaSolution = JObject.Parse(jsonResponse3)["solution"]["gRecaptchaResponse"].ToString();
            }

            return captchaSolution;
        }
    }
}

Conclusão

Neste tutorial, cobrimos o básico de como usar Selenium com C# para lidar com CAPTCHAs e demonstramos web scraping com um exemplo prático. Com essas técnicas e ferramentas como CapSolver, você pode automatizar de forma eficiente interações com websites protegidos por CAPTCHA e extrair dados de forma transparente.

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