在使用C#与Selenium Chromedriver进行自动化测试时,有时会遇到网站使用了HCaptcha或2Captcha/anticaptcha这样的验证码来防止自动化工具的访问。以下是关于这些验证码的基础概念、相关优势、类型、应用场景以及如何解决这些问题的详细解答。
HCaptcha 是一种由Human Verification Service提供的验证码服务,旨在通过要求用户完成一些简单的任务(如点击图片中的特定对象)来验证其是否为人类用户。
2Captcha/anticaptcha 是另一种第三方验证码解决服务,它可以帮助自动化工具绕过各种类型的验证码,包括HCaptcha。
原因:HCaptcha通过JavaScript动态加载,并且需要用户交互才能完成验证。
解决方法:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Net.Http;
using Newtonsoft.Json;
public class HcaptchaSolver
{
private static readonly HttpClient client = new HttpClient();
private const string ApiKey = "YOUR_2CAPTCHA_API_KEY";
public static async Task<string> SolveHcaptcha(string sitekey, string url)
{
var response = await client.PostAsJsonAsync("http://2captcha.com/in.php", new
{
key = ApiKey,
method = "hcaptcha",
sitekey = sitekey,
pageurl = url
});
var result = await response.Content.ReadAsStringAsync();
var requestId = JsonConvert.DeserializeObject<dynamic>(result).request;
while (true)
{
await Task.Delay(5000);
response = await client.GetAsync($"http://2captcha.com/res.php?key={ApiKey}&action=get&id={requestId}");
result = await response.Content.ReadAsStringAsync();
if (result.Contains("CAPCHA_NOT_READY"))
continue;
var solution = JsonConvert.DeserializeObject<dynamic>(result).request;
return solution;
}
}
}
// Usage
var driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://example.com");
var sitekey = "YOUR_SITEKEY";
var solution = await HcaptchaSolver.SolveHcaptcha(sitekey, driver.Url);
// Inject the solution into the page
((IJavaScriptExecutor)driver).ExecuteScript($"document.getElementById('h-captcha-response').value = '{solution}';");
通过上述方法,可以在C# Selenium中有效地处理HCaptcha和2Captcha/anticaptcha验证码,从而顺利进行自动化测试或其他自动化任务。
领取专属 10元无门槛券
手把手带您无忧上云