///
C# ReCaptcha v.2
Ekaterina Yanchuk
Ekaterina Yanchuk
技术文章作者
January 20, 2025
5 分钟

如何使用C#、Selenium和CapMonster Cloud解决ReCaptcha v2

在本示例中,我们将使用 Visual Studio 开发环境编写 C# 代码;您也可以使用 VS Code 或其他任何方便您使用的编辑器/开发环境。

 

  • 打开 Visual Studio,创建新项目,选择支持 C# 的 "控制台应用程序(Microsoft)":
none provided

  • 单击 "下一步",为项目命名并选择位置,创建项目。

  • 转到解决方案资源管理器,右键单击项目名称并转到 "管理 NuGet 包"。

  • 在打开的 NuGet 中,选择 "浏览 "选项卡,在这里我们需要安装必要的库:Selenium.Webdriver, Selenium.Webdriver.ChromeDriver (...) 和 Zennolab.CapmonsterClout.Client.如果要使用从".env "文件加载数据,还要安装 dotenv。安装所有组件后,转到 "Installed(已安装)"选项卡查看所需软件包列表: 
     

none provided

  • 现在可以开始编写代码了。让我们从导入必要的组件开始:
使用 OpenQA.Selenium;
使用 OpenQA.Selenium.Chrome;
使用 Zennolab.CapMonsterCloud;
使用 Zennolab.CapMonsterCloud.Requests;

namespace CaptchaSolver

 

  • 现在,让我们使用 Selenium 和 CapMonster Cloud 库创建并向 CapMonster Cloud 服务器发送请求,获取验证码解决方案并将结果返回到我们的页面:

   class Program
{
    static async Task Main(string[] args)
    {
       string API_KEY = "YOUR_API_KEY";
       string SITE_KEY = "6Le-wvkSAAAAAPBMRTv0Q4Muexq9bi0DJwx_mJ-";
       string WEBSITE_URL = "https://www.google.com/recaptcha/api2/demo";

       await SolveCaptcha(API_KEY, SITE_KEY, WEBSITE_URL);

       Console.WriteLine("Press any key to exit...");
       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("Page open, reCAPTCHA solving...");

         var task = new RecaptchaV2ProxylessRequest
         {
           WebsiteUrl = WEBSITE_URL、
         WebsiteKey = SITE_KEY
           };

           var result = await cmCloudClient.SolveAsync(task);
          Console.WriteLine("Task is solved!");

            ((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("Verification completed!");
           }
         catch (Exception ex)
         {
           Console.WriteLine($"Ошибка: {ex.Message}");
          }

         await Task.Delay(5000);

        driver.Quit();
        }
     }
}

 

 

完整代码: 

使用 OpenQA.Selenium;
使用 OpenQA.Selenium.Chrome;
使用 Zennolab.CapMonsterCloud;
使用 Zennolab.CapMonsterCloud.Requests;

命名空间 CaptchaSolver

 类 程序
    {
       static async Task Main(string[] args)
       {
         string API_KEY = "YOUR_API_KEY";
         string SITE_KEY = "6Le-wvkSAAAAPBMRTv0Q4Muexq9bi0DJwx_mJ-";
         string WEBSITE_URL = "https://www.google.com/recaptcha/api2/demo";

         await SolveCaptcha(API_KEY, SITE_KEY, WEBSITE_URL);

        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();
        }

       static async Task SolveCaptcha(string API_KEY, string SITE_KEY, string WEBSITE_URL)
       {
        var clientOptions = new ClientOptions
         {
         ClientKey = API_KEY
         };

         var cmCloudClient = CapMonsterCloudCloudClientFactory.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("Page open, reCAPTCHA solving...");

         var task = new RecaptchaV2ProxylessRequest
              {
           WebsiteUrl = WEBSITE_URL、
         WebsiteKey = SITE_KEY
               };

           var result = await cmCloudClient.SolveAsync(task);
         Console.WriteLine("Task is solved!");

             ((IJavaScriptExecutor)driver).ExecuteScript("var element = document.getElementById('g-recaptcha-response');" +nbsp;    ((IJavaScriptExecutor)driver).
           $"element.textContent = '{result.Solution.Value}';");

           driver.FindElement(By.Id("recaptcha-demo-submit")).Click();
         Console.WriteLine("Verification completed!");
              }
           catch (Exception ex)
           {
        Console.WriteLine($"Error: {ex.Message}");
              }

           await Task.Delay(5000);

         driver.Quit();
           }
         }
 }    }
}

 

 

代码说明:

 

类 Program

 

static async Task Main(string[] args: 应用程序的 Main 方法,将在程序启动时执行。该方法是异步的,使用 Task 来执行异步操作。

 

string API_KEY = "YOUR_API_KEY";:定义 API_KEY 变量,其中包含 CapMonster Cloud 的 API 密钥。43307086614173pt;margin-top:0pt;" dir="ltr">string SITE_KEY = "6Le-wvkSAAAAAPBMRTv0Q4Muexq9bi0DJwx_mJ-";:定义包含 reCAPTCHA 站点密钥的 SITE_KEY 变量。

 

string WEBSITE_URL ="https://www.google.com/recaptcha/api2/demo";:定义包含 reCAPTCHA 网页 URL 的 WEBSITE_URL 变量。

 

等待 SolveCaptcha(API_KEY,SITE_KEY,WEBSITE_URL);:调用 SolveCaptcha 方法,将密钥和 URL 作为参数传递。

 

Console.WriteLine("按任意键退出...");:

 

Console.ReadKey();:等待用户按键后结束程序。

 

SolveCaptcha 函数在指定的网页上执行 reCAPTCHA 解决方案。

 

var clientOptions = new ClientOptions { ClientKey = API_KEY };:

 

var cmCloudClient = CapMonsterCloudCloudClientFactory.Create(clientOptions);:使用指定的选项创建 CapMonster Cloud API 客户端。

 

;

 

options.AddArgument("--no-sandbox"); 和 options.AddArgument("--disable-dev-shm-usage");:

 

using (var driver = new ChromeDriver(options))

 

driver.Navigate().GoToUrl(WEBSITE_URL);:转到浏览器中指定的 URL。

 

var task = new RecaptchaV2ProxylessRequest { WebsiteUrl = WEBSITE_URL, WebsiteKey = SITE_KEY };:

 

var result = await cmCloudClient.SolveAsync(task);:使用 CapMonster 云 API 解决 reCAPTCHA 问题。

 

((IJavaScriptExecutor)driver).ExecuteScript("var element = document.getElementById('g-recaptcha-response');" + $"element.textContent = '{result.Solution.Value}';");:

 

driver.FindElement(By.Id();: 查找按钮元素并点击它完成验证。

 

Console.WriteLine("Verification completed!");:

 

catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); }: 处理可能的异常并显示错误信息。38;margin-bottom:0pt;margin-left:35.43307086614173pt;margin-top:0pt;" dir="ltr">await Task.Delay(5000);: 等待 5 秒。

 

driver.Quit();:关闭浏览器。

 

 

让我们运行脚本。如果您的操作正确无误,结果将是程序成功执行:

none provided

Note:我们在此提醒您,该产品用于在您自己的网站和您拥有合法访问权限的网站上自动进行测试。

ItGuy
geear
面向软件开发者的联盟计划
通过用户识别验证码的消费获取高达 30% 的返佣。
✅ 请求已发送
感谢您对我们的合作伙伴计划感兴趣!我们将在 7 个工作日内与您联系。
请求加入
填写表格以提交申请加入合作伙伴计划。
更多文章