如何在任意页面上找到验证码 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。 网站有时会为登录表单和注册表单各包含一个组件。请将密钥与真正拒绝你的表单对应起来,并检查哪一个离提交按钮最近。
- 密钥在两次访问之间发生变化。 每次运行时都重新读取。密钥通常是稳定的,但旧版本部署留下的缓存密钥可能会失效。
- 找到了密钥,但 token 被拒绝。 sitekey 很可能是正确的。接下来请检查组件尺寸和代理设置,可以从无感验证码指南和代理对比开始。
检查你是否找对了 sitekey
一个页面可能包含多个 sitekey。分析工具、评论表单和订阅框有时会各自添加组件。在求解之前,请确认该 sitekey 属于你要自动化的表单。有三项快速检查有助于此:
- 在开发者工具中找到表单的提交按钮,然后沿 DOM 树向上查找,直到找到包含
data-sitekey的最近元素。这就是保护该表单的组件。 - 将该密钥与 iframe 地址中的密钥进行比较。如果两者一致,你拿到的就是组件实际使用的密钥。
- 如果你获准这样做,请先用已求解的 token 手动提交一次表单,并检查网站是否接受。
网站重新部署时,密钥也可能发生变化。如果昨天还能正常产生被接受的 token 的密钥,今天突然失效了,请先重新读取页面,再做其他改动。重新读取不需要任何成本,并且能排除最常见的突发故障原因。
需要点击后才显示组件的页面,还需要多一个步骤。先打开页面,执行显示组件的点击操作,然后再读取 sitekey。在点击之前读取页面会返回空结果,这看起来像组件缺失,实际上是时序问题。请等待匹配 [data-sitekey] 的元素出现,而不是休眠固定的时间。
下一步
注册账户,即可获得免费试用额度,无需信用卡,然后测试你的第一个 sitekey。