识别隐形 PopularCaptcha:区别与提交内容
隐形 PopularCaptcha 看起来像根本没有验证码。页面上没有“我不是机器人”的方框。网站从自己的 JavaScript 中调用 PopularCaptcha,通常是在访客点击提交时触发,只有在不确定访客身份时才会显示挑战。对于自动化脚本来说,这种控件更难发现,但识别过程仍然只需一次请求。
Scarnox 目前支持 PopularCaptcha,包括隐形版本。你只需设置一个标志 is_invisible,然后发送与可见控件相同的请求。其他验证码类型即将支持。
如何判断它是隐形的
- 控件带有
data-size="invisible"。 - 网站在自己的代码中调用控件的
execute()函数。 - 页面中有 sitekey,但任何地方都看不到可见的复选框。
由 sitekey 上的配置决定它是否隐形,而不是页面的外观。如果不确定,请查找 sitekey,并在页面的 JavaScript 中检查控件的选项。
需要发送的内容
使用相同的接口和相同的任务类型,并添加值为 true 的 is_invisible:
{
"captcha_type": "PopularCaptchaTaskProxyless",
"site_key": "10000000-ffff-ffff-ffff-000000000001",
"site_url": "https://example.com/login",
"is_invisible": true
}
与其他示例一样,在 Authorization: Bearer 请求头中带上你的密钥。该调用会阻塞直到 token 准备好,不需要轮询。超时时间设置为约 185 秒。
把 token 回传给页面
隐形集成几乎都使用回调,而不是表单字段。网站会把一个函数名传给控件,可能是通过 data-callback 属性,也可能是通过 render() 的选项。调用这个函数并传入 token,网站自己的代码就会继续执行,就像访客已经通过了挑战一样:
await page.evaluate((t) => {
document.querySelectorAll('[name="h-captcha-response"]').forEach((el) => { el.value = t; });
const cb = document.querySelector("[data-sitekey]")?.dataset.callback;
if (cb && typeof window[cb] === "function") window[cb](t);
}, token);
同时设置隐藏字段也没有坏处,它能覆盖那些在提交时读取该字段的网站。
时机比平时更重要
对于隐形控件,网站决定何时运行挑战,通常就是访客提交的那一刻。所以要在那一刻再识别,而不是更早。最简单的做法是:在脚本点击按钮之前立即触发识别,然后调用回调并提交。
Token 在大约两分钟内过期。如果在页面加载时获取 token,然后过了一分钟才使用,很可能会被拒绝。
常见错误
把隐形 sitekey 当作普通的可见任务发送,可能得到网站会拒绝的 token。如果 API 返回了 token 但网站拒绝了它,请按以下顺序检查:
is_invisible是否设置为true?- 网站是否调用了回调,并且是否在表单提交之前调用?
site_url是否是隐形控件运行的那个页面?- 如果网站仍然拒绝 token,问题可能与识别它的 IP 有关。请对比代理与无代理识别。
安全地测试隐形流程
隐形控件很难手动测试,因为挑战只在提交时运行,而且大多数情况下它会在没有任何提示的情况下通过。请按以下顺序测试:
- 确认使用
is_invisible为true时识别能返回 token,可以使用免费试用指南中的冒烟测试。 - 在浏览器控制台中,用该 token 自己手动触发网站的回调,观察表单是否继续。
- 从脚本提交表单,并检查随后出现的页面。
- 如果条件允许,从第二个网络环境重复一次运行,以确认 token 与识别它的 IP 无关。
测试应只在你拥有的表单上进行,或者在你有权测试的网站预发布副本上进行。切勿对你无法控制的真实账户运行隐形流程。
一次隐形提交中的事件顺序
一个运行正常的集成遵循以下顺序:
- 访客或你的脚本填写表单。
- 你的脚本从页面中读取 sitekey 和页面 URL。
- 你的脚本以
is_invisible为true调用识别接口,并等待 token。 - 你的脚本把 token 写入响应字段,并调用网站的回调。
- 网站的代码带着 token 提交表单。
如果第 3 步发生的时间比第 5 步早很多,token 可能在表单提交之前就过期了。请尽量缩短这段间隔。
网站拒绝隐形 token 时
拒绝并不总是 token 本身的问题。在修改识别请求之前,请先检查以下几点:
- 回调是在表单提交之前运行的,而不是之后。
- 表单是否从你的脚本写入的那个字段读取 token。有些网站对隐形控件使用不同的字段。
- 携带 token 的请求,是否来自加载页面的同一个会话。来自其他会话的 Cookie 不匹配。
- 在识别和提交之间,页面没有刷新,否则 token 会被丢弃。
只有在完成这些检查之后,才应该考虑代理的问题。大多数拒绝来自回调或会话,而不是 IP。
下一步
免费试用额度,无需信用卡:注册账户,并在你自己的页面上测试隐形 sitekey。