Scarnox · Blog

识别隐形 PopularCaptcha:区别与提交内容

隐形 PopularCaptcha 看起来像根本没有验证码。页面上没有“我不是机器人”的方框。网站从自己的 JavaScript 中调用 PopularCaptcha,通常是在访客点击提交时触发,只有在不确定访客身份时才会显示挑战。对于自动化脚本来说,这种控件更难发现,但识别过程仍然只需一次请求。

Scarnox 目前支持 PopularCaptcha,包括隐形版本。你只需设置一个标志 is_invisible,然后发送与可见控件相同的请求。其他验证码类型即将支持。

如何判断它是隐形的

由 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 但网站拒绝了它,请按以下顺序检查:

  1. is_invisible 是否设置为 true?
  2. 网站是否调用了回调,并且是否在表单提交之前调用?
  3. site_url 是否是隐形控件运行的那个页面?
  4. 如果网站仍然拒绝 token,问题可能与识别它的 IP 有关。请对比代理与无代理识别。

安全地测试隐形流程

隐形控件很难手动测试,因为挑战只在提交时运行,而且大多数情况下它会在没有任何提示的情况下通过。请按以下顺序测试:

  1. 确认使用 is_invisible 为 true 时识别能返回 token,可以使用免费试用指南中的冒烟测试。
  2. 在浏览器控制台中,用该 token 自己手动触发网站的回调,观察表单是否继续。
  3. 从脚本提交表单,并检查随后出现的页面。
  4. 如果条件允许,从第二个网络环境重复一次运行,以确认 token 与识别它的 IP 无关。

测试应只在你拥有的表单上进行,或者在你有权测试的网站预发布副本上进行。切勿对你无法控制的真实账户运行隐形流程。

一次隐形提交中的事件顺序

一个运行正常的集成遵循以下顺序:

  1. 访客或你的脚本填写表单。
  2. 你的脚本从页面中读取 sitekey 和页面 URL。
  3. 你的脚本以 is_invisible 为 true 调用识别接口,并等待 token。
  4. 你的脚本把 token 写入响应字段,并调用网站的回调。
  5. 网站的代码带着 token 提交表单。

如果第 3 步发生的时间比第 5 步早很多,token 可能在表单提交之前就过期了。请尽量缩短这段间隔。

网站拒绝隐形 token 时

拒绝并不总是 token 本身的问题。在修改识别请求之前,请先检查以下几点:

只有在完成这些检查之后,才应该考虑代理的问题。大多数拒绝来自回调或会话,而不是 IP。

下一步

免费试用额度,无需信用卡:注册账户,并在你自己的页面上测试隐形 sitekey。