Scarnox · Blog

如何在任意页面上找到验证码 sitekey(4 种方法)

每一次验证码求解都始于 sitekey:网站在验证码服务商处注册的公开 ID。浏览器能够看到它,因此你也能读取它。对于 PopularCaptcha,sitekey 是一个 UUID,例如 a5f74b19-9e45-40e0-b45d-47ff91b7a6c2。其他服务商使用不同的格式。例如,Google reCAPTCHA 的密钥以 6L 开头。以下是四个查找位置,按从容易到可靠的顺序排列。

Scarnox 目前支持 PopularCaptcha 的求解。sitekey 的查找方法对任何验证码都适用,因此当你为其他类型做规划时,这些方法同样有用。其他类型,例如 reCAPTCHA 和 Cloudflare Turnstile,即将推出。

1. data-sitekey 属性

打开开发者工具(F12),进入 Elements(元素) 面板,按 Ctrl+F 搜索 data-sitekey。大多数组件会以这样的属性保存密钥:

<div class="h-captcha" data-sitekey="a5f74b19-9e45-40e0-b45d-47ff91b7a6c2"></div>

如果你在这里找到了它,就已经完成了。复制该值,然后进入求解步骤即可。

2. 网络面板

如果组件是由 JavaScript 渲染的,属性可能从未出现在 HTML 中。打开 Network(网络) 面板,重新加载页面,并筛选组件的配置请求。对于 PopularCaptcha,该请求通常名为 checksiteconfig。sitekey 是它的一个查询参数:

.../checksiteconfig?v=...&host=example.com&sitekey=a5f74b19-...

如果你测试的网站上该请求名称不同,按 URL 中的 sitekey 一词进行筛选同样有效。

3. iframe 地址

验证码挑战本身是由验证码服务商提供的 iframe。它的 src 中以参数形式携带 sitekey。右键点击组件,选择 Inspect(检查),然后从 iframe 地址中读取该值。当页面在主文档中隐藏了该属性时,这是最可靠的方法。

4. 无感组件

无感组件没有复选框。网站通过自己的代码调用组件的 render() 或 execute() 函数,并把 sitekey 作为参数传入。请在页面的 JavaScript 中搜索它:打开 Sources(源代码) 面板,按 Ctrl+Shift+F,然后搜索 sitekey。无感 sitekey 在求解时需要设置无感标志。参见无感验证码求解。

通过脚本读取 sitekey

如果属性位于原始 HTML 中,脚本无需浏览器即可读取它:

import re
import requests

html = requests.get("https://example.com/signup", timeout=30).text
m = re.search(r'data-sitekey="([^"]+)"', html)
print(m.group(1) if m else "no data-sitekey in the raw HTML")

如果这段代码没有输出任何内容,说明组件是由 JavaScript 渲染的。请使用真实浏览器,即上面网络面板中的方法。只抓取你获准自动化访问的页面,并保持较低的请求频率。

应该使用哪个 URL?

将组件所在页面的 URL 作为 site_url 发送。主机名最为关键,因此对于注册组件,应使用 https://example.com/signup。一个完整的 PopularCaptcha 请求如下所示:

{
  "captcha_type": "PopularCaptchaTaskProxyless",
  "site_key": "a5f74b19-9e45-40e0-b45d-47ff91b7a6c2",
  "site_url": "https://example.com/signup"
}

将其发送至 https://api.scarnox.com/api/tasks/create,并在 Authorization: Bearer 请求头中附上你的密钥。该调用会阻塞直到 token 准备好,因此不需要第二次请求来检查结果。

常见问题

检查你是否找对了 sitekey

一个页面可能包含多个 sitekey。分析工具、评论表单和订阅框有时会各自添加组件。在求解之前,请确认该 sitekey 属于你要自动化的表单。有三项快速检查有助于此:

网站重新部署时,密钥也可能发生变化。如果昨天还能正常产生被接受的 token 的密钥,今天突然失效了,请先重新读取页面,再做其他改动。重新读取不需要任何成本,并且能排除最常见的突发故障原因。

需要点击后才显示组件的页面,还需要多一个步骤。先打开页面,执行显示组件的点击操作,然后再读取 sitekey。在点击之前读取页面会返回空结果,这看起来像组件缺失,实际上是时序问题。请等待匹配 [data-sitekey] 的元素出现,而不是休眠固定的时间。

下一步

注册账户,即可获得免费试用额度,无需信用卡,然后测试你的第一个 sitekey。