Python SDK

Python 验证码识别:在 Python 脚本和爬虫中识别验证码

执行 pip install capskip,在普通代码或 asyncio 代码中为每种验证码调用一个对应的方法,即可从运行在你掌控的硬件上的 CapSkip 应用拿到 token 或文字结果。这一切都不按次计费。

Windows x64·本地运行,验证码不会离开你的电脑
  • pip install capskip
  • 同步与 asyncio 客户端
  • Python 3.10 及更高版本
每月验证码数量40,000
40.0k250.0k
别家按次收费,每 1,000 次约 $1.40$56.00
CapSkip Bronze,统一定价$35.00
$21.00留在你的口袋里按当前用量,每月如此

只需一条 pip install capskip,任何脚本都能变成 Python 验证码识别工具:交给它一个 reCAPTCHA、一个 Cloudflare Turnstile 验证框、一个极验(GeeTest)v3 滑块或一张模糊的文字图片,它就会返回可直接提交的 token 或字符。真正的识别在本地完成,由你安装在工作站或 VPS 上的 Windows 桌面应用负责,这意味着不必在远程队列里等待,每次调用也不会单独收费。

SDK 为每一类验证码提供一个方法。recaptcha() 支持 Enterprise、v3,以及 v2 的复选框和隐形版本;turnstile() 既能处理小组件,也能处理整页的 Cloudflare 验证;geetest() 使用 gt 和 challenge 这对参数;normal() 负责识别图片验证码,无论你传入的是已保存的文件、图片链接还是 base64 数据。对于较少见的类型,friendly_captcha()、captchafox()、capy()、altcha() 和 amazon_waf() 也遵循相同的调用方式。

两个客户端共用这些方法名。CapSkip 像 requests 一样是阻塞式的,适合 Selenium 或快速脚本;AsyncCapSkip 则把每次识别变成一个协程,你可以在 httpx 或异步 Playwright 爬虫中一次 gather 几十个。套餐统一定价,每月 35 美元起,因此一个触发一千次的重试循环,花费与单次调用完全相同。

按验证码类型设置超时时间。 文字图片约 0.1 秒即可返回。对于 reCAPTCHA、Cloudflare Turnstile 和极验,应用会在后台打开真实浏览器,因此前两者大约需要 3 到 10 秒,滑块大约需要 7 到 12 秒。请在超时设置和工作池中为这些调用留出更多余量。

pip install capskip 为你的 Python 代码带来什么

每类验证码对应一个方法

recaptcha()、turnstile()、geetest()、normal() 以及另外四个小众识别方法共用同一种调用方式。如果传入了某个类型不接受的参数,ValidationException 会立即提示你,而不是在目标网站上悄无声息地失败。

阻塞或 asyncio,方法名相同

CapSkip 适合 requests 代码和 Selenium 会话。AsyncCapSkip 把每次识别都变成协程,单个事件循环就能并行 await 多个验证码,无需额外线程。

文字验证码直接返回字符串

normal() 能在约 0.1 秒内把扭曲的图片转换成字符。不打开浏览器,也不需要代理,因此 OCR 这一步永远不会成为爬虫的瓶颈。

与 Selenium、Playwright、Scrapy 并肩工作

SDK 不会干预浏览器。你的工具找到 sitekey,CapSkip 返回答案,然后由你把它填入已打开的页面,或随表单提交一起发送。

为重试逻辑设计的异常体系

NetworkException、TimeoutException、ApiException 和 ValidationException 都继承自 CapSkipError,因此一个 except 子句就能全部捕获,你也可以分别处理每一种失败。

循环与重试不额外收费

统一价格的月度授权涵盖你的脚本发出的每一次调用,因此无论是重试循环、被拒绝的表单提交,还是跑满整个周末的爬取,都不会产生按次识别费用。

从浏览器附加组件到 pip 包:三种接入方式

Python
# pip install capskip
from capskip import CapSkip

solver = CapSkip(host="127.0.0.1", port=8080)

# recaptcha() covers v2, v3 and Enterprise; turnstile(), geetest()
# and normal() (image CAPTCHAs) follow the same pattern.
result = solver.recaptcha(
    sitekey="YOUR_SITEKEY",
    url="https://example.com/page-with-recaptcha",
)

print(result["code"])   # token, inject it and submit the form

一个最简的阻塞式示例:连接应用,把 sitekey 和页面 URL 传给 recaptcha(),再从 result['code'] 读取 token 后提交。

适合手动浏览的扩展

一款 Chrome 和 Firefox 附加组件,无需代码即可在页面内识别验证码;在为目标网站写脚本之前先手动摸索时尤其好用。它需要应用保持运行。

capskip 包及其姊妹库

pip install capskip 为 Python 提供一个阻塞式客户端和一个异步客户端。Node.js、PHP 和 .NET 的官方 SDK 则覆盖混合技术栈中的其他部分。

面向现有代码的本地 API

原有的 2Captcha 或 Anti-Captcha Python 代码可以通过服务模拟器与 CapSkip 通信;任何支持 HTTP 的程序,哪怕只是最基础的 requests 调用,都能使用本地 API。

在 reCAPTCHA 在线演示上试用 SDK

在把脚本对准真实网站之前,先拿我们托管的 reCAPTCHA v2 演示页面跑一遍。它加载的是真正的小组件,你可以从头到尾确认 sitekey 处理和 token 提交都正常工作。

从安装程序到你在 Python 中的第一次识别

  1. 安装 CapSkip 应用

    把 CapSkip 安装在负责识别的 Windows PC 或 VPS 上。你的 Python 代码可以放在同一台机器上,也可以放在任何能通过网络访问它的地方。 下载安装程序

  2. 激活套餐或试用

    购买青铜、白银或黄金套餐(区别仅在于可用设备数量),或者先领取免费试用。CapSkip 会通过电子邮件发送登录信息,直接填入应用的登录界面即可。 比较各套餐

  3. 安装包并调用

    在你的 virtualenv 中运行 pip install capskip,创建一个指向应用地址和端口的客户端,然后调用与你的验证码对应的方法。 阅读 SDK 指南

本地还是计量计费的 Python 验证码识别工具:CapSkip 对比 2Captcha 与 CapSolver

三者都能为你的 Python 代码识别验证码。区别在于:由谁来完成识别、你的数据流向哪里,以及爬虫通宵运行时账单如何变化。

功能CapSkip2Captcha / CapSolver
计费方式统一月费,35 美元起,零按次费用按每千次识别收费
计算在哪里进行在应用内,运行于你自己的硬件上在远程服务器上,有时由人工完成
用量增长时的成本任何用量,账单都一样随每次识别和重试而增长
你的数据验证码永远不离开你的机器上传到外部服务
并行识别无线程限制,取决于你的硬件吞吐量越大,账单越高
Python 接入方式pip install capskip,或继续使用你的 2Captcha 客户端供应商自家的 Python 客户端
图片验证码速度约 0.1 秒,本地识别每张图片都要经历网络往返和排队

价格

不再按次付费

选择你的授权

青铜授权

$35/ 月

订阅青铜授权

授权即时激活

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

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

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

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

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

想先试用一下?

开始 3 天免费试用,在你自己的目标上识别 500 个任意类型的验证码。

开始免费试用

用 Python 识别验证码:requests 脚本、浏览器与 Scrapy

验证码出现在哪里,决定了你如何接入识别工具;而 Python 代码通常会在以下三种场景之一遇到它。

纯 HTTP 脚本。如果你用 requests 或 httpx 抓取页面,就完全不需要浏览器。从已经下载的 HTML 中提取 sitekey,带上页面 URL 向 CapSkip 请求 token,然后把 token 和其余表单字段一起提交。请保持同一个会话,让 cookie 前后一致,并及时提交,因为 reCAPTCHA 的 token 生成后大约两分钟就会失效。

Selenium 和 Playwright 脚本。SDK 从不控制浏览器,只负责生成答案。你的脚本从已打开的页面读取 sitekey,等待识别完成,用一行 JavaScript 调用把 token 写入页面中隐藏的答案字段,然后点击提交。配合异步 Playwright 使用时,AsyncCapSkip 能让一个标签页等待它的验证码,其他标签页照常工作。

Scrapy 爬虫和 asyncio 爬虫。spider 可以用 CSS 或 XPath 选择器读取 sitekey,完成识别,再 yield 一个携带 token 的 FormRequest。对于大型异步爬取,用 return_exceptions=True 把多次识别一起 gather,这样一个出错的验证码不会连累其他结果。此后,爬取速度取决于 CapSkip 机器的硬件,而不是套餐限制。

相关指南: Selenium 验证码识别工具 · Playwright 验证码识别工具 · 用 Python 并行识别验证码

如何在 Python 中自动识别验证码?
启动 CapSkip 应用,用 pip install capskip 安装这个包,再创建一个指向应用地址和端口的客户端。然后针对眼前的验证码调用相应的方法:recaptcha() 传入 sitekey 和页面 URL,normal() 传入图片。答案会放在 result['code'] 中,可直接提交。
这个 Python reCAPTCHA 识别工具也支持 v3 和 Enterprise 吗?
支持。recaptcha() 能处理 v2 的复选框、隐形和回调版本,以及 v3 和 Enterprise。对于 v3,请带上目标页面使用的 action 标签,然后像 v2 一样提交 token。我们不承诺具体的 v3 分数:结果取决于网站、你的 IP 和请求节奏。
文字验证码还需要我自己写 OCR 代码吗?
不需要。把已保存的文件、图片链接、base64 字符串或 data URI 交给 normal() 即可。识别出的字符几乎立刻出现在 result['code'] 中,每张图片约 0.1 秒,你也不需要训练或调优任何模型。如果某种不常见的图片类型识别效果不佳,CapSkip 会免费为它训练。
我能用 asyncio 同时运行大量识别吗?
可以。AsyncCapSkip 的方法名与阻塞式客户端完全一致,但每次识别都是一个协程,因此 asyncio.gather 能在一个事件循环里同时保持几十个识别在进行。加上 return_exceptions=True 后,失败的识别会以异常对象的形式出现在结果列表中,而不会被抛出,你依然能拿到其余所有答案。
CapSkip 如何融入 Scrapy spider?
Scrapy 做这件事不需要浏览器。在 parse 方法中,用 CSS 或 XPath 选择器从 response 里读取 sitekey,通过 SDK 完成识别,再 yield 一个携带 token 的 FormRequest,字段名按目标表单的要求来命名。图片验证码用 normal() 也是同样的模式。
如果我的 Python 代码运行在 macOS 或 Linux 上,能用 CapSkip 吗?
可以。只有 CapSkip 应用需要 Windows。把它安装在 Windows 台式机或 Windows VPS 上,开启服务器模式让它在网络上监听,然后用那台机器的地址作为 host 创建客户端。这样你的脚本就可以继续留在 Mac、Linux 服务器或它原本运行的任何地方。
pip install capskip 会往我的环境里装些什么?
这个包需要 Python 3.10 或更高版本。它会为阻塞式客户端引入 requests,为异步客户端引入 httpx,大多数爬虫项目本来就装有这两个库。它采用 MIT 许可证,因此个人项目、公司代码和 CI 流水线都适用。
我现有的 2Captcha Python 客户端还能继续用吗?
可以,前提是客户端和 CapSkip 在同一台 Windows 电脑上。把 CapSkip 切换到它的 2Captcha 模拟器,然后点击 Hosts 文件旁边的 Add(添加)按钮;之后你当前的库发往 2Captcha 的请求就会在本地得到响应(限 CapSkip 支持的验证码类型)。Anti-Captcha、CapSolver 以及其他被模拟的服务,用法也一样。

为你的 Python 脚本提供不计量的验证码识别

安装应用,运行 pip install capskip,然后把你的第一个 recaptcha() 或 normal() 调用指向它。此后的每一次识别,无论一次还是一百万次,都包含在同一个月度套餐里。