如何使用C#、Selenium和CapMonster Cloud解决ReCaptcha v2
在本示例中,我们将使用 Visual Studio 开发环境编写 C# 代码;您也可以使用 VS Code 或其他任何方便您使用的编辑器/开发环境。
- 打开 Visual Studio,创建新项目,选择支持 C# 的 "控制台应用程序(Microsoft)":

单击 "下一步",为项目命名并选择位置,创建项目。
转到解决方案资源管理器,右键单击项目名称并转到 "管理 NuGet 包"。
在打开的 NuGet 中,选择 "浏览 "选项卡,在这里我们需要安装必要的库:Selenium.Webdriver, Selenium.Webdriver.ChromeDriver (...) 和 Zennolab.CapmonsterClout.Client.如果要使用从".env "文件加载数据,还要安装 dotenv。安装所有组件后,转到 "Installed(已安装)"选项卡查看所需软件包列表:

- 现在可以开始编写代码了。让我们从导入必要的组件开始:
使用 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();:关闭浏览器。
让我们运行脚本。如果您的操作正确无误,结果将是程序成功执行:

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