Полное руководство: Selenium & CapMonster Cloud
9 августа 2024 г.

Как решить ReCaptcha v2 на C# с помощью Selenium&CapMonster Cloud

Для написания кода на языке C# в данном примере мы будем использовать среду разработки Visual Studio, вы можете работать в VS Code или любом другом удобном для вас редакторе/среде разработки. 

 

  • Итак, запускаем Visual Studio, создаем новый проект, выбираем “Консольное приложение (Майкрософт)” c поддержкой C#:

none provided

  • Нажимаем Далее, даем название нашему проекту и выбираем расположение для него, создаем проект.

  • Заходим в “Обозреватель решений”, нажимаем правой кнопкой на названии проекта и переходим в “Управление пакетами NuGet”. 

  • В открывшемся NuGet выбираем вкладку “Обзор”, здесь нам нужно будет установить необходимые библиотеки: Selenium.Webdriver,  Selenium.Webdriver.ChromeDriver (...)и Zennolab.CapmonsterClout.Client. Также установите dotenv, если хотите использовать загрузку данных из файла “.env”. После установки всех компонентов перейдите во вкладку “Установлено”, чтобы проверить список нужных пакетов: 
     

none provided

  • Теперь можно приступить к написанию кода. Начнем с импорта необходимых компонентов: 

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();: Закрытие браузера.

 

 

Запустим наш скрипт. Если вы все сделали правильно, в итоге будет результат с успешным выполнением программы: 

none provided

NB: Напоминаем, что продукт используется для автоматизации тестирования на ваших собственных сайтах и на сайтах, к которым у вас есть доступ на законных основаниях.