.NET / C# SDK

C# 验证码识别工具:适用于异步 .NET 代码、Selenium 和 Playwright

引用一个 NuGet 包,await 一个 token 或图片验证码的文字结果,剩下的交给 CapSkip:它在你掌控的 Windows 电脑或服务器上完成识别,你的 .NET 代码请求多少次都不计量。

Windows x64·本地运行,验证码不会离开你的电脑
  • MIT 许可的 NuGet SDK
  • 基于 .NET Standard 2.0
  • 统一月度授权
每月验证码数量40,000
40.0k250.0k
别家按次收费,每 1,000 次约 $1.40$56.00
CapSkip Bronze,统一定价$35.00
$21.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 项目的接入方式

C#
// 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 还原到第一个识别成功的验证码

  1. 在一台 Windows 机器上运行 CapSkip

    把 CapSkip 安装在你的 .NET 代码能访问到的任意 Windows 工作站、VPS 或独立服务器上,然后在你开发期间让它在后台持续运行。 下载安装程序

  2. 激活套餐或试用

    购买青铜、白银或黄金订阅,或领取包含 500 次识别的 3 天免费试用,然后在应用中输入邮件发来的登录凭据即可激活。 开始免费试用

  3. 添加包并 await

    运行 dotnet add package CapSkip,把 CapSkipClient 指向应用中显示的主机和端口,然后在控制台应用、服务或测试中 await 对应验证码类型的方法。 查看全部 SDK

在 C# 代码中对比 CapSkip 与 2Captcha、CapSolver

当你的 .NET 服务大规模运行时,本地统一定价的识别工具与按量计费的云端 API 相比表现如何。

功能CapSkip2Captcha / CapSolver
你为什么付费一份订阅,每月 35 美元起,不按次收费每次识别都收费,按每 1,000 次计价,用多少付多少
验证码在哪里识别在 CapSkip 内部,在你自有的 Windows 硬件上在服务商的服务器上,有时由人工完成
忙碌一个月后的账单保持不变,无论你 await 了多少任务随每次识别和每次重试而上涨
谁能看到挑战没有其他人,数据始终留在你的网络中你发送的每个挑战都会交给第三方
并行识别线程数只看你的 CPU 和内存能承受多少更高的吞吐量通常要额外付费
接入 .NET 的方式NuGet 包,或通过模拟保留原有客户端服务商自己的客户端库
图片验证码返回时间约 0.1 秒,没有远程排队每张图片都要经过上传、排队和网络轮询

价格

不再按次付费

选择你的授权

黄金授权

$75/ 月

订阅黄金授权

授权即时激活

按月计费,可随时在账户中取消。

功能相同,机器越多,吞吐量越大。

每台机器的识别速度都受限于它自己的 CPU 和内存。机器越多,同时运行的线程就越多:白银可同时识别两倍数量的验证码,黄金则是三倍。

  • 无限解决,无每日上限
  • 无限线程,速度随硬件提升
  • 90% 至 100% 的识别准确率
  • 可直接替代主流打码服务的 API
  • 几乎兼容任何工具,无需编写代码
  • REST API、SDK 和浏览器扩展
  • 出现新的验证码类型时免费训练
  • 在你自己的机器上运行,数据不外传

上面展示的每一种验证码类型,每个授权都支持。 查看支持范围

想先试用一下?

开始 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 包?
安装名为 CapSkip 的包,可以用 dotnet add package CapSkip,也可以在 Visual Studio 的程序包管理器控制台中运行 Install-Package CapSkip。它采用 MIT 许可,把 CapSkip 应用的本地 API 封装成异步方法,每种验证码类型一个,从 RecaptchaAsync 到 NormalAsync。
同一个包的构建能同时用于 .NET Framework 4.6.1 和 .NET 8 吗?
可以。该库面向 .NET Standard 2.0,这两个运行时都能使用它,.NET 6、7、9 以及 .NET Core 2.0 或更高版本也一样。在较旧的目标框架上,NuGet 会自动为你还原 System.Text.Json,无需手动添加任何额外引用。
在 C# 中如何把识别出的 reCAPTCHA token 填入 Selenium WebDriver 页面?
用 FindElement 定位小组件,读取它的 sitekey,然后用该 key 和 driver.Url await RecaptchaAsync。接着通过 IJavaScriptExecutor.ExecuteScript 设置隐藏的 g-recaptcha-response 字段并提交。对于隐形、Enterprise 或 v3 小组件,传入一个选项字典,把 invisible 或 enterprise 设为 1,或把 version 设为 v3 并附上页面的 action。
.NET SDK 既能处理 Turnstile 验证框,也能处理 Cloudflare 的整页检查吗?
可以。如果只有验证框,用 sitekey 和 URL await TurnstileAsync,然后把 result.Code 放进 cf-turnstile-response 字段提交。整页检查还需要两项输入:把该页面的 data 和 pagedata 字符串复制到选项字典中,并在下一次请求中使用 result.UserAgent 返回的浏览器标识。
在 WinForms 或控制台工具中阻塞等待异步方法安全吗?
在控制台应用或后台线程中,对返回的 Task 调用 GetAwaiter().GetResult() 完全没问题。但在 WinForms UI 线程或 ASP.NET Core 中,建议使用 await,因为在那里阻塞会让窗口冻结,或在识别期间一直占用请求线程。
在 .NET 中如何取消一个缓慢的识别,或修改它的时间限制?
给任意方法传入 CancellationToken,取消它即可同时停止提交和轮询。CapSkipClient 构造函数还接受 defaultTimeout(图片验证码默认 120 秒)和 recaptchaTimeout(reCAPTCHA 及其他基于浏览器的类型默认 300 秒)。超出时限的识别会抛出 TimeoutException。
用 C# 编写的 CapSolver 或 2Captcha 客户端能否不做修改继续使用?
可以。在 CapSkip 应用中启用与该服务对应的模拟器,然后在同一界面把它添加到 hosts 文件。客户端继续调用它一直使用的地址,受支持的验证码类型在你的机器上识别,按次收费也随之停止。
用 Tesseract 作为 C# 验证码读取器够用吗?
很少够用。Tesseract 是为清晰的印刷文字调校的,而验证码图片是故意扭曲的,所以它经常识别错误。NormalAsync 会把图片发给 CapSkip,后者约 0.1 秒就能读取数千种验证码样式;遇到识别效果不佳的新样式,还可以免费训练。

在下一个 .NET 构建中引用 CapSkip

安装应用,添加 NuGet 包,几分钟内就能 await 到第一个 token。从此以后,你的 C# 代码发起的每一次识别都包含在同一份月费里,无论量有多大。