C# 验证码识别工具:适用于异步 .NET 代码、Selenium 和 Playwright
引用一个 NuGet 包,await 一个 token 或图片验证码的文字结果,剩下的交给 CapSkip:它在你掌控的 Windows 电脑或服务器上完成识别,你的 .NET 代码请求多少次都不计量。
- MIT 许可的 NuGet SDK
- 基于 .NET Standard 2.0
- 统一月度授权
var solver = new CapSkip();
var token = await solver.ReCaptcha(
sitekey: "6Le-wvkS…",
url: "example.com/signup");03AGdBq27…0.12 秒 · $0.00在 .NET 解决方案里加入 C# 验证码识别工具,理应像添加任何其他依赖一样简单,用 CapSkip 确实如此:运行 dotnet add package CapSkip,创建一个 CapSkipClient,然后 await 结果即可。这个包本身只是一个轻量的 MIT 许可封装。真正的识别由 CapSkip 桌面应用完成,它安装在你运行 Windows 的任何地方(工作站、云端 VPS 或独立服务器),因此验证挑战永远不会被发往远程打码平台。
每一类验证码都有自己的可 await 方法。RecaptchaAsync 支持 Google 小组件的复选框、隐形、v3 和 Enterprise 各种形式;TurnstileAsync 既能处理 Cloudflare 小组件,也能处理整页挑战;GeetestAsync 接收一对新获取的极验(GeeTest)v3 gt 和 challenge;AltchaAsync、CapyAsync、CaptchaFoxAsync 和 FriendlyCaptchaAsync 覆盖其余类型。如果你只需要一个 C# 验证码读取器,NormalAsync 能在约 0.1 秒内把扭曲的文字图片转换成字符。
由于客户端面向 .NET Standard 2.0,同一个引用可以同时服务 .NET 8 worker、.NET Framework 4.6.1 WinForms 小工具和 Selenium 测试项目。授权采用统一的月度订阅,每月 35 美元起;已经接入 2Captcha 或 CapSolver 的解决方案可以保留原有客户端:CapSkip 应用会在本地响应它。
两种接入方式,同一个引擎。 你可以用 NuGet SDK 从零开始,也可以让现有的 2Captcha 或 CapSolver .NET 客户端原封不动:在 CapSkip 中开启该服务的模拟器并将其添加到 hosts 文件,它的请求就会改由你的机器识别。两条路最终都落在同一份不计量的授权上。 浏览 API 参考
这款 .NET 验证码识别工具为你的 C# 代码带来什么
基于 Task 的方法,支持取消
每次识别都返回 SolveResult 的 Task,并接受 CancellationToken,因此正在停止的主机或被中止的 ASP.NET Core 请求都能干净地丢弃待处理的识别。
从 Framework 4.6.1 到 .NET 9,一个引用通用
由于基于 .NET Standard 2.0 编译,同一个包可以在 .NET 6 到 9、.NET Core 2.0 及更高版本,以及老旧的 .NET Framework 4.6.1 桌面工具中加载。
统一价格下的 Task.WhenAll
用 Task.WhenAll 或经 SemaphoreSlim 限流的循环同时发起五十个识别。价格保持不变,因此并发上限取决于运行 CapSkip 的机器,而不是你的账单。
专为验证码训练的 OCR,取代 Tesseract
NormalAsync 接受磁盘路径、URL 或 base64 文本形式的图片,约 0.1 秒即可返回其中的字符。它能读取数千种扭曲的验证码样式,而通用 OCR 往往在这些样式上栽跟头。
适配 Selenium、Playwright for .NET、PuppeteerSharp
SDK 从不驱动你的浏览器。用 FindElement 或 GetAttributeAsync 读取 sitekey,await 获取 token,然后在点击提交前通过 IJavaScriptExecutor 或 EvaluateAsync 注入页面。
强类型结果与强类型异常体系
SolveResult 以属性形式提供 Code、UserAgent 以及极验的 Challenge、Validate 和 Seccode 值,而 NetworkException、TimeoutException、ValidationException 和 ApiException 均派生自 CapSkipError。
选择适合你 .NET 项目的接入方式
// dotnet add package CapSkip
using CapSkip;
var solver = new CapSkipClient(host: "127.0.0.1", port: 8080);
var result = await solver.RecaptchaAsync(
"YOUR_SITEKEY",
"https://example.com/page-with-recaptcha");
Console.WriteLine(result.Code); // token传入 site key 和页面 URL 来 await RecaptchaAsync;随后 result.Code 中就是你的表单 POST 或浏览器会话接下来要提交的 token。
手动浏览器操作就用扩展
调试时亲自一步步走注册或结账流程?Chrome 或 Firefox 扩展会发现每个验证码,并交给正在运行的应用识别,完全不用写 C# 代码。
一个 NuGet 验证码识别包
把它添加到任何 .NET 项目,调用强类型的异步方法即可。使用 Python、Node.js 或 PHP 的团队也有基于同一识别引擎的姊妹 SDK。
为现有 .NET 客户端提供本地 API
为 2Captcha 或类似服务编写的 C# 客户端照常发送请求。CapSkip 在你自己的网络中响应这套协议,因此无需重写任何代码。
让测试项目对准一个真实的 reCAPTCHA 页面
在把 CapSkip 放进生产代码之前,先让一个临时控制台应用指向我们托管的 reCAPTCHA v2 演示页。它加载的是真实的小组件,你可以亲眼看到 RecaptchaAsync 返回一个真正可用的 token。
从 NuGet 还原到第一个识别成功的验证码
在 C# 代码中对比 CapSkip 与 2Captcha、CapSolver
当你的 .NET 服务大规模运行时,本地统一定价的识别工具与按量计费的云端 API 相比表现如何。
| 功能 | CapSkip | 2Captcha / CapSolver |
|---|---|---|
| 你为什么付费 | 一份订阅,每月 35 美元起,不按次收费 | 每次识别都收费,按每 1,000 次计价,用多少付多少 |
| 验证码在哪里识别 | 在 CapSkip 内部,在你自有的 Windows 硬件上 | 在服务商的服务器上,有时由人工完成 |
| 忙碌一个月后的账单 | 保持不变,无论你 await 了多少任务 | 随每次识别和每次重试而上涨 |
| 谁能看到挑战 | 没有其他人,数据始终留在你的网络中 | 你发送的每个挑战都会交给第三方 |
| 并行识别 | 线程数只看你的 CPU 和内存能承受多少 | 更高的吞吐量通常要额外付费 |
| 接入 .NET 的方式 | NuGet 包,或通过模拟保留原有客户端 | 服务商自己的客户端库 |
| 图片验证码返回时间 | 约 0.1 秒,没有远程排队 | 每张图片都要经过上传、排队和网络轮询 |
想先试用一下?
开始 3 天免费试用,在你自己的目标上识别 500 个任意类型的验证码。
相关验证码识别工具与指南
如何用 C# 识别验证码:从 HttpClient 到 Hangfire 任务
在 .NET 代码里,验证码通常出现在三个地方之一:提交表单的 HttpClient、操控真实浏览器的 Selenium 或 Playwright 会话,或者无人值守的后台任务。一个 CapSkipClient 实例就能服务这三种场景,区别只在于你如何使用返回的答案。
对于 HttpClient 场景,使用该表单的会话 Cookie 获取 site key 或下载图片,await 对应的方法,然后把 result.Code 加入 POST 请求的 FormUrlEncodedContent,字段名用目标表单读取的那个,通常是 g-recaptcha-response。Cloudflare 挑战页还需要在选项中传入它的 data 和 pagedata 值,后续请求则应携带 result.UserAgent。
在浏览器会话中,SDK 不会碰驱动程序。你的测试从元素读取 key,用 driver.Url await RecaptchaAsync 或 TurnstileAsync,再通过 IJavaScriptExecutor 或 EvaluateAsync 把 token 写回页面,然后提交。这些 token 只在几分钟内有效,所以要在提交步骤之前再请求,而不是放在一个冗长测试的开头。
无人值守的任务最能体现统一授权的价值。Hangfire 任务或托管 worker 可以重试失败的识别、按计划通宵运行,并用 Task.WhenAll 并发展开,完全不需要有人充值余额。只需捕获一次 CapSkipError,即可记录应用无法访问、选项被拒或超时等情况;再把任务的 CancellationToken 传给每次调用,这样正在关闭的主机就不会卡在待处理的识别上。
要离开 CapSolver 或 2Captcha,但想保留它的 .NET 客户端?在运行 CapSkip 的机器上启用该服务的模拟器,并使用应用中的 hosts 文件选项。现有的 C# 代码一行不动,它原本发送的验证码类型都会在本地得到响应。
相关指南: 用 C# 识别 reCAPTCHA v2 · 用 C# 处理 Turnstile 挑战页面 · Hangfire 验证码任务
在 .NET 中识别验证码应该安装哪个 NuGet 包?
同一个包的构建能同时用于 .NET Framework 4.6.1 和 .NET 8 吗?
在 C# 中如何把识别出的 reCAPTCHA token 填入 Selenium WebDriver 页面?
.NET SDK 既能处理 Turnstile 验证框,也能处理 Cloudflare 的整页检查吗?
在 WinForms 或控制台工具中阻塞等待异步方法安全吗?
在 .NET 中如何取消一个缓慢的识别,或修改它的时间限制?
用 C# 编写的 CapSolver 或 2Captcha 客户端能否不做修改继续使用?
用 Tesseract 作为 C# 验证码读取器够用吗?
在下一个 .NET 构建中引用 CapSkip
安装应用,添加 NuGet 包,几分钟内就能 await 到第一个 token。从此以后,你的 C# 代码发起的每一次识别都包含在同一份月费里,无论量有多大。
