Como resolver o ReCaptcha v2 em C# usando Selenium&CapMonster Cloud
Neste exemplo, usaremos o ambiente de desenvolvimento do Visual Studio para escrever código em C#; você pode trabalhar no VS Code ou em qualquer outro editor/ambiente de desenvolvimento que lhe seja conveniente.
- Abra o Visual Studio, crie um novo projeto, selecione "Aplicativo de console (Microsoft)" com suporte a C#:
Clique em Next, nomeie nosso projeto e selecione um local para ele, crie um projeto.
Vá para o Solution Explorer, clique com o botão direito do mouse no nome do projeto e vá para "Manage NuGet Packages".
No NuGet que se abre, selecione a guia "Browse", aqui precisaremos instalar as bibliotecas necessárias: Selenium.Webdriver, Selenium.Webdriver.ChromeDriver (...) e Zennolab.CapmonsterClout.Client. Instale também o dotenv se quiser usar o carregamento de dados do arquivo ".env". Depois de instalar todos os componentes, vá para a guia "Installed" (Instalado) para verificar a lista de pacotes necessários:
- Agora você pode começar a escrever o código. Vamos começar importando os componentes necessários:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using Zennolab.CapMonsterCloud;
usando Zennolab.CapMonsterCloud.Requests;
namespace CaptchaSolver
Agora vamos criar e enviar uma solicitação ao servidor do CapMonster Cloud, obter a solução do captcha e retornar o resultado à nossa página usando as bibliotecas do Selenium e do CapMonster Cloud:
class Program
{
static async Task Main(string[] args)
{
string API_KEY = "YOUR_API_KEY";
string SITE_KEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-";
string WEBSITE_URL = "https://www.google.com/recaptcha/api2/demo";
aguardar SolveCaptcha(API_KEY, SITE_KEY, WEBSITE_URL);
Console.WriteLine("Pressione qualquer tecla para sair...");
Console.ReadKey();
}
static async Task SolveCaptcha(string API_KEY, string SITE_KEY, string WEBSITE_URL)
{
var clientOptions = new ClientOptions
{
ClientKey = API_KEY
};
var cmCloudClient = CapMonsterCloudClientFactory.Create(clientOptions);
var options = new ChromeOptions();
options.AddArgument("--no-sandbox");
options.AddArgument("--disable-dev-shm-usage");
usando (var driver = new ChromeDriver(options))
{
try
{
driver.Navigate().GoToUrl(WEBSITE_URL);
Console.WriteLine("Página aberta, reCAPTCHA resolvendo...");
var task = new RecaptchaV2ProxylessRequest
{
WebsiteUrl = WEBSITE_URL,
WebsiteKey = SITE_KEY
};
var result = await cmCloudClient.SolveAsync(task);
Console.WriteLine("A tarefa foi resolvida!");
((IJavaScriptExecutor)driver).ExecuteScript("var element = document.getElementById('g-recaptcha-response');" +
$"element.textContent = '{result.Solution.Value}';");
driver.FindElement(By.Id("recaptcha-demo-submit")).Click();
Console.WriteLine("Verificação concluída!");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
aguardar Task.Delay(5000);
driver.Quit();
}
}
}
Código completo:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using Zennolab.CapMonsterCloud;
usando Zennolab.CapMonsterCloud.Requests;
namespace CaptchaSolver
{
classe Program
{
static async Task Main(string[] args)
{
string API_KEY = "YOUR_API_KEY";
string SITE_KEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-";
string WEBSITE_URL = "https://www.google.com/recaptcha/api2/demo";
aguardar SolveCaptcha(API_KEY, SITE_KEY, WEBSITE_URL);
Console.WriteLine("Pressione qualquer tecla para sair...");
Console.ReadKey();
}
static async Task SolveCaptcha(string API_KEY, string SITE_KEY, string WEBSITE_URL)
{
{
ClientKey = API_KEY
};
var cmCloudClient = CapMonsterCloudClientFactory.Create(clientOptions);
var options = new ChromeOptions();
options.AddArgument("--no-sandbox");
options.AddArgument("--disable-dev-shm-usage");
usando (var driver = new ChromeDriver(options))
{
try
{
driver.Navigate().GoToUrl(WEBSITE_URL);
Console.WriteLine("Página aberta, reCAPTCHA resolvendo...");
var task = new RecaptchaV2ProxylessRequest
{
WebsiteUrl = WEBSITE_URL,
WebsiteKey = SITE_KEY
};
var result = await cmCloudClient.SolveAsync(task);
Console.WriteLine("A tarefa foi resolvida!");
((IJavaScriptExecutor)driver).ExecuteScript("var element = document.getElementById('g-recaptcha-response');" +
$"element.textContent = '{result.Solution.Value}';");
driver.FindElement(By.Id("recaptcha-demo-submit")).Click();
Console.WriteLine("Verificação concluída!");
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
aguardar Task.Delay(5000);
driver.Quit();
}
}
}
}
Explicação do código:
class Program: Declarando a classe Program.
static async Task Main(string[] args): o método Main do aplicativo, que será executado quando o programa for iniciado. Esse método é assíncrono e usa Task para executar operações assíncronas.
string API_KEY = "YOUR_API_KEY";: Definindo uma variável API_KEY que contém a chave da API para o CapMonster Cloud.
string SITE_KEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-";: Definição da variável SITE_KEY que contém a chave do site para o reCAPTCHA.
string WEBSITE_URL = "https://www.google.com/recaptcha/api2/demo";: Definição de uma variável WEBSITE_URL contendo o URL da página da Web do reCAPTCHA.
await SolveCaptcha(API_KEY, SITE_KEY, WEBSITE_URL);: Chamando o método SolveCaptcha, passando as chaves e o URL como argumentos.
Console.WriteLine("Pressione qualquer tecla para sair...");: Imprimindo uma mensagem no console.
Console.ReadKey();: Aguardando que o usuário pressione uma tecla antes de encerrar o programa.
SolveCaptchaa função executa uma solução reCAPTCHA na página da Web especificada.
var clientOptions = new ClientOptions { ClientKey = API_KEY };: Criando um objeto ClientOptions especificando a chave da API.
var cmCloudClient = CapMonsterCloudClientFactory.Create(clientOptions);: Criando um cliente da API do CapMonster Cloud com as opções especificadas.
var options = new ChromeOptions();: Criando um objeto ChromeOptions para configurar o navegador Chrome.
options.AddArgument("--no-sandbox"); e options.AddArgument("--disable-dev-shm-usage");: Adição de argumentos de inicialização do navegador Chrome para melhorar a segurança e reduzir o uso de memória.
usando (var driver = new ChromeDriver(options)): Criando uma instância do ChromeDriver para controlar o navegador Chrome.
driver.Navigate().GoToUrl(WEBSITE_URL);: Indo para o URL especificado no navegador.
var task = new RecaptchaV2ProxylessRequest { WebsiteUrl = WEBSITE_URL, WebsiteKey = SITE_KEY };: Criando um objeto de tarefa para resolver o reCAPTCHA.
var result = await cmCloudClient.SolveAsync(task);: resolução do reCAPTCHA usando a API do CapMonster Cloud.
((IJavaScriptExecutor)driver).ExecuteScript("var element = document.getElementById('g-recaptcha-response');" + $"element.textContent = '{result.Solution.Value}';");: Execução de código JavaScript para inserir uma solução reCAPTCHA em uma página.
driver.FindElement(By.Id("recaptcha-demo-submit")).Click();:Encontrar o elemento de botão e clicar nele para concluir a verificação.
Console.WriteLine("Verificação concluída!");: Exibe uma mensagem sobre a conclusão da verificação.
catch (Exception ex) { Console.WriteLine($"Erro: {ex.Message}"); }: Tratamento de possíveis exceções e exibição de uma mensagem de erro.
await Task.Delay(5000);:Aguardando 5 segundos.
driver.Quit();: Fechando o navegador.
Vamos executar nosso script. Se você fez tudo corretamente, o resultado será a execução bem-sucedida do programa:
Note: Gostaríamos de lembrá-lo de que o produto é usado para automatizar testes em seus próprios sites e em sites aos quais você tem acesso legal.