Selenium

Selenium 验证码识别工具:适用于 Python 和 WebDriver 脚本

一个 reCAPTCHA、一次 Turnstile 验证、一个极验 v3 滑块或一张扭曲的图片,都不该让 WebDriver 会话就此中断。给浏览器装上 CapSkip 扩展,或在测试中调用 SDK,每次识别都在本地完成,不计次数。

Windows x64·本地运行,验证码不会离开你的电脑
  • Python、C# 和 Node.js
  • 扩展或 SDK 两种方式
  • 兼容 Selenium Grid
每月验证码数量40,000
40.0k250.0k
别家按次收费,每 1,000 次约 $1.40$56.00
CapSkip Bronze,统一定价$35.00
$21.00留在你的口袋里按当前用量,每月如此

WebDriver 运行迟早会碰上受挑战保护的登录、搜索或注册表单,这时就需要 Selenium 验证码识别工具了。Selenium 能定位元素、点击和输入,却无法生成 reCAPTCHA token,也认不出扭曲的字母,于是测试卡住,报告里满是超时。CapSkip 就在 driver 旁边,运行在同一台 Windows 电脑上,或者脚本能访问到的 VPS 上,在浏览器等待时把答案交回来。

接入方式有两种,适合不同的 Selenium 使用习惯。免代码方式会启动一个已装好 CapSkip 扩展的 Chrome 或 Firefox 配置文件,小组件在页面内自动通过,就像有人亲手勾选了一样。脚本方式则把控制权留在测试中:pip install capskip,用 find_element 读取 sitekey,调用 solver.recaptcha() 或 solver.turnstile(),再用 execute_script 把 token 写回。图片验证码约 0.1 秒即可返回文字。

在 token 类验证码方面,CapSkip 支持 reCAPTCHA v2、v3 和 Enterprise,以及 Cloudflare Turnstile。极验 v3 滑块、Capy 拼图和 CaptchaFox 同样支持,ALTCHA 和 Friendly Captcha 背后的工作量证明验证也包括在内。图片验证码涵盖数千种变体。不支持 hCaptcha、FunCaptcha 和极验 v4。一切都不计量,因此触发数百个挑战的夜间回归测试,和一个都没触发的收费完全相同。

你的 driver 代码可以保持原样。 把 CapSkip 扩展装进一个浏览器配置文件,在应用运行时用这个配置文件启动 Selenium,挑战就会在你的显式等待计时期间自行通过。只有当某个测试需要直接拿到答案时,才改用 SDK。 阅读扩展指南

Selenium 验证码识别工具能为 WebDriver 做什么

Chrome 或 Firefox 专用的识别配置文件

在一个专用的 Chrome 配置文件中安装一次扩展,再通过 user-data-dir 交给 driver;或者通过 install_addon() 加载 Firefox 附加组件。只要应用在运行,Selenium 打开的每个窗口都能识别验证码。

在同一测试文件中获取 token

用 find_element 读取 data-sitekey,把它和 driver.current_url 一起传给 solver.recaptcha(),再通过 execute_script 设置 g-recaptcha-response。应用工作期间,浏览器始终由你的脚本控制。

直接从页面元素读取图片文字

用 screenshot_as_base64 截取图片并发送给 solver.normal()。由于图片不会被请求第二次,你用 send_keys 输入的文字与本次会话显示的内容一致。

可与 undetected-chromedriver 搭配

undetected-chromedriver 和 SeleniumBase UC 模式等隐身 driver 能减少挑战出现的次数。仍然出现的挑战由 CapSkip 来通过,两种工具各自解决问题的一半。

旧的 2Captcha 辅助代码照常运行

你围绕 2Captcha 或 Anti-Captcha 编写的辅助代码无需任何修改。在应用中把该服务选为模拟器,点击 Hosts 文件旁的添加,CapSkip 就会自己响应这些调用。

一份订阅,多个 driver 并行

机器能承载多少 WebDriver 实例,就运行多少。套餐从不限制线程数,即使测试套件遇到数百个挑战,月度账单也不会增加分毫。

选择你的 WebDriver 代码接入 CapSkip 的方式

Python
from selenium import webdriver
from capskip import CapSkip

driver = webdriver.Chrome()
driver.get("https://example.com/login")

solver = CapSkip(host="127.0.0.1", port=8080)
sitekey = driver.find_element("css selector", ".g-recaptcha").get_attribute("data-sitekey")

token = solver.recaptcha(sitekey=sitekey, url=driver.current_url)["code"]

# Inject the token and submit
driver.execute_script(
    "document.getElementById('g-recaptcha-response').innerHTML = arguments[0];",
    token,
)
driver.find_element("css selector", "button[type=submit]").click()

Python Selenium:从小组件读取 sitekey,向 CapSkip 请求 token,将其写入响应字段,然后点击提交。

Selenium 配置文件中的扩展

把 Chrome 或 Firefox 扩展加载到 Selenium 启动的配置文件中。小组件就地识别,你的测试完全不用包含识别代码。

在定位器旁直接调用 SDK

Python、Node.js、PHP 和 C# 客户端返回的 token 和图片文字,可直接用于你所用 WebDriver 绑定中的 execute_script 或 send_keys。

为其他所有绑定提供本地 API

Java 和其他没有 SDK 的绑定可以直接调用 HTTP API,为 2Captcha 类服务编写的 Selenium 代码在开启模拟器后即可使用。

用真实的 reCAPTCHA 测试你的 Selenium 脚本

把你的 WebDriver 指向我们的 reCAPTCHA v2 演示页面,针对真实的 Google 小组件运行识别步骤,看着表单接受 token,然后再把它用于你自己的目标网站。

在 Selenium 测试套件旁准备好 CapSkip

  1. 在测试机上安装 CapSkip

    把 CapSkip 安装在执行 WebDriver 脚本的 Windows 桌面电脑或 VPS 上,或者安装在这些脚本能通过网络访问的任意机器上,并在测试运行期间保持它开启。 下载安装程序

  2. 激活方案或免费试用

    用订单邮件中的登录信息登录 CapSkip。试用版为一台设备提供三天和 500 次识别,足够让测试套件在真实目标上跑一遍。 开始免费试用

  3. 为 driver 加上识别步骤

    要么用带扩展的配置文件启动 Selenium,要么 pip install capskip,在挑战打断流程的地方调用识别工具。每个方法和选项都有文档说明。 打开 API 文档

在 Selenium 中:本地识别与按次计费 API 对比

当你的 Selenium 运行每天都会遇到挑战时,CapSkip 与 2Captcha 等服务有何不同。

功能CapSkip2Captcha & API 服务
完整跑一次测试的成本同一个月度套餐,35 美元起,识别次数不限每次识别都计费,套件越大账单越高
挑战的识别地点在驱动浏览器的那台机器上,或在 VPS 上在远程服务器上,往往由人工完成
图片验证码返回时间约 0.1 秒,无需跨越互联网传输需要数秒,每张图片还要加一次网络往返
你已为 2Captcha 写好的代码通过内置模拟器照常运行绑定该厂商的 API 及其余额
会话截图和挑战数据留在你自己的机器上每次识别都发送给第三方服务
并行 WebDriver 会话套餐不限线程,只受硬件限制额外并发往往要加钱
接入 Selenium 的方式扩展配置文件、Python 或 .NET 客户端,或直接 HTTP 调用API 密钥、预付点数和其专属客户端

价格

不再按次付费

选择你的授权

黄金授权

$75/ 月

订阅黄金授权

授权即时激活

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

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

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

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

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

想先试用一下?

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

开始免费试用

用 Selenium Python 识别 reCAPTCHA:扩展还是 SDK

当验证码阻断流程时,Selenium 有两种可靠的选择:让浏览器扩展在页面内完成挑战,或者在脚本中识别并注入答案。两者都依赖于在测试能访问到的地方运行的 CapSkip 应用,选哪一种取决于测试需要多少控制权。

扩展方式。创建一个 Chrome 配置文件,在其中安装 CapSkip 扩展,然后通过 user-data-dir 参数用该配置文件启动 webdriver.Chrome;对于 Firefox,用附加组件文件调用 driver.install_addon()。请以有头模式或 --headless=new 运行,因为旧的无头模式不会加载任何扩展。之后 reCAPTCHA、Turnstile 和极验 v3 小组件都会就地处理,你的 WebDriverWait 只需等待表单继续往下走。

SDK 方式。用 pip install capskip 安装客户端(需要 Python 3.10 或更高版本),并为整个会话创建一个 solver,默认指向 127.0.0.1 的 8080 端口。对于 reCAPTCHA,从 .g-recaptcha 元素中获取 data-sitekey;如果小组件由 JavaScript 渲染,则取 reCAPTCHA iframe 的 src 中的 k 值,然后用 driver.current_url 调用 solver.recaptcha()。隐形小组件需要 invisible=1,v3 则需要 version v3 以及页面执行验证时传入的 action 字符串。用 execute_script 设置 g-recaptcha-response,如果小组件指定了 data-callback 就运行它,并在两分钟内提交。对于 Turnstile,换成 solver.turnstile() 和隐藏的 cf-turnstile-response 字段即可,其余流程不变。

在 Python Selenium 中加入图片验证码识别步骤时,从 img 元素读取 screenshot_as_base64,给这个字符串加上 data:image/png;base64 前缀后传给 solver.normal(),再用 send_keys 输入结果。千万不要再次请求图片 URL:大多数图片验证码与会话绑定,第二次请求会生成一张新图片。识别 reCAPTCHA 和 Turnstile 时,把浏览器所用的代理(HTTP、HTTPS、SOCKS5 或 SOCKS5h)交给 CapSkip;图片识别则不需要代理。

相关指南: undetected-chromedriver 验证码 · SeleniumBase 验证码 · Selenium Grid 验证码

在 Python 中用 Selenium 识别 reCAPTCHA,最快的方法是什么?
保持 CapSkip 应用运行,pip install capskip,然后从 .g-recaptcha 元素读取 data-sitekey。用这个 key 和 driver.current_url 调用 solver.recaptcha(),必要时加上 invisible=1,或者 version v3 和页面的 action。用 execute_script 把返回的 code 写入 g-recaptcha-response,如果有 data-callback 就触发它,然后提交。
我的 Selenium 项目该用扩展还是 SDK?
如果你想完全不写识别代码,就用扩展:在你的等待执行期间,浏览器配置文件会独立完成每个小组件。如果测试必须自己决定何时识别、记录结果、重试,或在旧版无头模式下运行,就用 SDK。你可以先从扩展开始,之后再把高频路径迁移到 SDK。
如何把扩展装进 Selenium 打开的浏览器?
对于 Chrome,从 Chrome 应用商店把扩展安装到一个专用配置文件中,再通过 user-data-dir 参数用该配置文件启动 Selenium。对于 Firefox,把附加组件文件传给 driver.install_addon()。请以有头模式或 --headless=new 运行,因为旧版无头模式无法加载扩展,并在测试运行期间保持 CapSkip 应用开启。
Selenium 如何把图片验证码交给 CapSkip?
定位验证码的 img 元素,读取它的 screenshot_as_base64 属性,加上 data:image/png;base64 前缀后交给 solver.normal()。再用 send_keys 把返回的字符输入答案框。截图比下载图片 URL 更好,因为网站会把图片与你的会话绑定,重新请求会显示不同的字母。
在 Selenium 中,它能处理 Cloudflare Turnstile 吗?包括整页验证吗?
能。对于小组件,从 .cf-turnstile 元素读取 data-sitekey,用页面 URL 调用 solver.turnstile(),并在提交前把 token 写入 cf-turnstile-response。如果 Cloudflare 显示的是整页验证,CapSkip 同样能识别,并在返回 token 的同时返回一个 userAgent;在该 Selenium 会话的剩余部分继续使用它,通行凭证才能保持有效。
表单仍然拒绝我注入的 token,通常是哪里出了问题?
大多数情况都出自三个原因:token 已超过两分钟,data-callback 从未被调用,或者页面有多个小组件,提交的是 g-recaptcha-response-1 而不是第一个字段。请在提交前一刻再识别,触发回调,并在网络面板中检查表单实际发送的是哪个字段。
我能在 C#、Node.js 或 Java 的 Selenium 中调用 CapSkip 吗?
可以。C# WebDriver 项目用 dotnet add package CapSkip 添加 .NET 客户端,Node.js 中的 selenium-webdriver 则使用 npm install capskip;查找、识别和注入的步骤与 Python 流程一一对应。Java 和其他绑定没有 SDK,可以用任意 HTTP 客户端直接调用本地 HTTP API。
这款识别工具支持无头 Chrome 和 Selenium Grid 吗?
SDK 方式适用于所有浏览器模式,因为识别在 CapSkip 内部运行,测试只需能访问它的主机和端口。在 Grid 上这让事情很简单:调用识别工具的是测试脚本,而不是 node。扩展方式则需要有头 Chrome 或新版无头模式。

让你的 Selenium 测试套件每次都能跑完

在 driver 旁安装 CapSkip,登录,然后选择扩展或 SDK。下一次 WebDriver 运行就会在本地通过所有验证码,无论测试套件遇到什么,月度账单都保持不变。