Как решить ReCaptcha v2 на C# с помощью Selenium&CapMonster Cloud
Для написания кода на языке C# в данном примере мы будем использовать среду разработки Visual Studio, вы можете работать в VS Code или любом другом удобном для вас редакторе/среде разработки.
Итак, запускаем Visual Studio, создаем новый проект, выбираем “Консольное приложение (Майкрософт)” c поддержкой C#:
Нажимаем Далее, даем название нашему проекту и выбираем расположение для него, создаем проект.
Заходим в “Обозреватель решений”, нажимаем правой кнопкой на названии проекта и переходим в “Управление пакетами NuGet”.
В открывшемся NuGet выбираем вкладку “Обзор”, здесь нам нужно будет установить необходимые библиотеки: Selenium.Webdriver, Selenium.Webdriver.ChromeDriver (...)и Zennolab.CapmonsterClout.Client. Также установите dotenv, если хотите использовать загрузку данных из файла “.env”. После установки всех компонентов перейдите во вкладку “Установлено”, чтобы проверить список нужных пакетов:
Теперь можно приступить к написанию кода. Начнем с импорта необходимых компонентов:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using Zennolab.CapMonsterCloud;
using Zennolab.CapMonsterCloud.Requests;
namespace CaptchaSolver
Создадим и отправим запрос на сервер CapMonster Cloud, получим решение капчи и вернем результат на нашу страницу, используя библиотеки Selenium и CapMonster Cloud:
class Program
{
static async Task Main(string[] args)
{
string API_KEY = "ВАШ_API_KEY";
string SITE_KEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-";
string WEBSITE_URL = "https://www.google.com/recaptcha/api2/demo";
await SolveCaptcha(API_KEY, SITE_KEY, WEBSITE_URL);
Console.WriteLine("Нажмите любую клавишу для выхода...");
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");
using (var driver = new ChromeDriver(options))
{
try
{
driver.Navigate().GoToUrl(WEBSITE_URL);
Console.WriteLine("Страница открыта, решение reCAPTCHA...");
var task = new RecaptchaV2ProxylessRequest
{
WebsiteUrl = WEBSITE_URL,
WebsiteKey = SITE_KEY
};
var result = await cmCloudClient.SolveAsync(task);
Console.WriteLine("Задача решена!");
((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("Верификация завершена!");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
await Task.Delay(5000);
driver.Quit();
}
}
}
Код полностью:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using Zennolab.CapMonsterCloud;
using Zennolab.CapMonsterCloud.Requests;
namespace CaptchaSolver
{
class Program
{
static async Task Main(string[] args)
{
string API_KEY = "ВАШ_API_KEY";
string SITE_KEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-";
string WEBSITE_URL = "https://www.google.com/recaptcha/api2/demo";
await SolveCaptcha(API_KEY, SITE_KEY, WEBSITE_URL);
Console.WriteLine("Нажмите любую клавишу для выхода...");
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");
using (var driver = new ChromeDriver(options))
{
try
{
driver.Navigate().GoToUrl(WEBSITE_URL);
Console.WriteLine("Страница открыта, решение reCAPTCHA...");
var task = new RecaptchaV2ProxylessRequest
{
WebsiteUrl = WEBSITE_URL,
WebsiteKey = SITE_KEY
};
var result = await cmCloudClient.SolveAsync(task);
Console.WriteLine("Задача решена!");
((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("Верификация завершена!");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
await Task.Delay(5000);
driver.Quit();
}
}
}
}
Объяснение кода:
class Program: Объявление класса Program.
static async Task Main(string[] args): Основной метод Main приложения, который будет выполняться при запуске программы. Этот метод асинхронный и использует Task для выполнения асинхронных операций.
string API_KEY = "YOUR_API_KEY";: Определение переменной API_KEY, содержащей ключ API для CapMonster Cloud.
string SITE_KEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-";: Определение переменной SITE_KEY, содержащей ключ сайта для reCAPTCHA.
string WEBSITE_URL = "https://www.google.com/recaptcha/api2/demo";: Определение переменной WEBSITE_URL, содержащей URL-адрес веб-страницы с reCAPTCHA.
await SolveCaptcha(API_KEY, SITE_KEY, WEBSITE_URL);: Вызов метода SolveCaptcha с передачей ключей и URL-адреса в качестве аргументов.
Console.WriteLine("Press any key to exit...");: Вывод сообщения в консоль.
Console.ReadKey();: Ожидание нажатия клавиши пользователем перед завершением программы.
Функция SolveCaptcha выполняет решение reCAPTCHA на указанной веб-странице.
var clientOptions = new ClientOptions { ClientKey = API_KEY };: Создание объекта ClientOptions с указанием ключа API.
var cmCloudClient = CapMonsterCloudClientFactory.Create(clientOptions);: Создание клиента CapMonster Cloud API с указанными опциями.
var options = new ChromeOptions();: Создание объекта ChromeOptions для настройки браузера Chrome.
options.AddArgument("--no-sandbox"); и options.AddArgument("--disable-dev-shm-usage");: Добавление аргументов запуска браузера Chrome для обеспечения безопасности и уменьшения использования памяти.
using (var driver = new ChromeDriver(options)): Создание экземпляра ChromeDriver для управления браузером Chrome.
driver.Navigate().GoToUrl(WEBSITE_URL);: Переход на указанный URL в браузере.
var task = new RecaptchaV2ProxylessRequest { WebsiteUrl = WEBSITE_URL, WebsiteKey = SITE_KEY };: Создание объекта задачи для решения reCAPTCHA.
var result = await cmCloudClient.SolveAsync(task);: Решение reCAPTCHA с использованием CapMonster Cloud API.
((IJavaScriptExecutor)driver).ExecuteScript("var element = document.getElementById('g-recaptcha-response');" + $"element.textContent = '{result.Solution.Value}';");: Исполнение JavaScript кода для вставки решения reCAPTCHA на страницу.
driver.FindElement(By.Id("recaptcha-demo-submit")).Click();: Нахождение элемента кнопки и клик на ней для завершения верификации.
Console.WriteLine("Verification completed!");: Вывод сообщения о завершении верификации.
catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); }: Обработка возможных исключений и вывод сообщения об ошибке.
await Task.Delay(5000);: Ожидание 5 секунд.
driver.Quit();: Закрытие браузера.
Запустим наш скрипт. Если вы все сделали правильно, в итоге будет результат с успешным выполнением программы:
NB: Напоминаем, что продукт используется для автоматизации тестирования на ваших собственных сайтах и на сайтах, к которым у вас есть доступ на законных основаниях.