EveryInfra

Yandex SmartCaptcha

Yandex SmartCaptchaYandex(Yandex Cloud SmartCaptcha)主挑战是勾选框或滑块;判可疑时叠加附加挑战 —— 文字识别、剪影按序点选、万花筒拼图。也支持隐形模式默认是一个「我不是机器人」勾选框,站点也可以配成拖动滑块。被判可疑(或站点把难度调到最高档)时再叠一道附加题:把图里的扭曲文字打出来、按指定顺序点选几个剪影图标、或者拖滑块把打散的图块拼回原图。附加题默认俄语。

正在查询可用性…$4.58 / 1K 次按成功计费,失败退款

接口规格

项目
typeyandex_smartcaptcha
必填参数website_urlwebsite_key
可选参数
返回一个 token 字符串solution.token
怎么用这个解填回表单的 smart-token
价格$4.58 / 1K 次 —— 按成功计费,没解出来退款
厂商文档Yandex(Yandex Cloud SmartCaptcha) 官方文档

参数去页面哪里取

下面全部是可以直接照做的定位方法 —— DOM 属性名、JS 全局变量名、script 上的 query 参数。

要两个:website_urlwebsite_key(Yandex 官方叫 client-side key,也就是 sitekey)。四处可取,任选其一:

  1. `data-sitekey` 属性 —— 自动嵌入模式下页面里有 <div class="smart-captcha" data-sitekey="……" data-hl="ru"></div>。容器 class 固定是 smart-captcha,同一元素上还可能有 data-hl(语言)和 data-callback(全局回调函数名)。
  2. `smartCaptcha.render()` 的第二个参数 —— 高级模式下页面自己调 window.smartCaptcha.render(container, { sitekey: "……", invisible: true, … })sitekey 键的值就是它。隐形验证码一定走这条,因为没有可见容器可以挂属性。
  3. 组件脚本 URL —— captcha.jssmartcaptcha.yandexcloud.netcaptcha-api.yandex.rusmartcaptcha.cloud.yandex.ru 加载(三个域名实测返回同一份 bundle)。高级模式下 URL 上带 ?render=onload&onload=<函数名>。看到这个脚本就能确认是它。
  4. 回填位 —— 通过后组件在容器内插入 <input type="hidden" name="smart-token" value="……">。我们交付的 token 就是填这个字段;如果你不是提交表单而是自己发请求,就把它作为 smart-token 参数带上。

别把两把 key 搞混。 sitekey(client-side key)是公开的、写在页面上、就是你要传给我们的那个;另一把 server key(secret key)只在站点服务端调 Yandex 校验接口时用,页面上永远不会出现。你在页面里能找到的那个一定是前者,找不到第二把是正常的。

没有可见容器时(隐形模式),直接在控制台跑 window.smartCaptcha 看有没有这个对象,有就说明组件已加载,再从 render() 调用处或 network 里的 captcha.js 请求参数回溯 sitekey。

调用示例

一个端点解全部验证码类型 —— 换一种验证码只改 type 这一个字段。

请求
curl -X POST https://api.everyinfra.com/api/v1/captcha \  -H "Authorization: Bearer omg_你的KEY" \  -H "Content-Type: application/json" \  -d '{"type":"yandex_smartcaptcha","website_url":"<website_url>","website_key":"<website_key>"}'
响应
{  "solution": {    "token": "…"  },  "billing": { "charged": true, "credits": 330 }}

怎么确认目标站用的就是它

前端组件采集行为与环境信号做预判(pre-check),分数低于阈值就升级出附加挑战。通过后组件在容器内写入一个用户 token,站点服务端拿它去 Yandex 的校验接口换「人 / 机器人」的结论。四档难度(Easy / Medium / Hard / Maximum)同时调整主挑战阈值、附加题图片难度和隐形模式的触发阈值;Maximum 档下附加挑战无条件出现。

容易搞混的

最容易搞混的是 Yandex 自己的「浏览器检查」拦截页 —— 访问 yandex 系域名时出现的「Проверка браузера перед переходом на …」全屏等待页是另一套反爬拦截层,它没有 sitekey、也没有 smart-token 字段,不属于本能力。判据很简单:页面上找不到 class="smart-captcha" 就不是。② 勾选框外观和 reCAPTCHA v2 几乎一样,靠容器 class(smart-captcha vs g-recaptcha)和回填字段名(smart-token vs g-recaptcha-response)区分。③ 滑块形态的 SmartCaptcha 容易被当成极验一类的滑动拼图,但它是「把滑块从左拖到右」的简单主挑战,不是拼图缺口对齐。

去看 reCAPTCHA v2 那一条 →

常见部署场景

已知的坑

建议配俄罗斯或邻近地区的住宅出口使用 —— 从远端 IP 过来本身就是它的降分信号,会显著提高附加挑战出现的概率

token 是一次性的且有效期很短,拿到就用,别缓存复用

剪影(SILHOUETTES)和万花筒(KALEIDOSCOPE)两种附加题型、以及滑块主挑战,厂商自己都标着 Preview 阶段,站点侧行为可能变;滑块在部分设备上明确说了可能不正常

站点难度设成 Maximum 时,附加挑战无条件出现,与你的行为分数无关 —— 别据此推断自己被判成了机器人

隐形模式下页面上没有任何可见组件,只能从 window.smartCaptcharender() 调用回溯 sitekey

目标站多在俄语区,建议配合当地住宅出口使用

常见问题

Yandex SmartCaptcha 要传哪些参数?

必填 website_url、website_key,没有可选参数。请求里 type 传 yandex_smartcaptcha。

解出来的东西怎么用?

返回一个 token 字符串,取 solution.token。填回表单的 smart-token

smartcaptcha.yandexcloud.net 要去页面的哪里找?

重点找 smartcaptcha.yandexcloud.net、smartcaptcha.cloud.yandex.ru、captcha-api.yandex.ru。本页「参数去页面哪里取」一节写了全部位置与取法,含可直接粘进控制台的一行命令。

怎么确认目标站用的就是 Yandex SmartCaptcha?

最容易搞混的是 Yandex 自己的「浏览器检查」拦截页 —— 访问 yandex 系域名时出现的「Проверка браузера перед переходом на …」全屏等待页是另一套反爬拦截层,它没有 sitekey、也没有 smart-token 字段,不属于本能力。判据很简单:页面上找不到 class="smart-captcha" 就不是。② 勾选框外观和 reCAPTCHA v2 几乎一样,靠容器 class(smart-captcha vs g-recaptcha)和回填字段名(smart-token vs g-recaptcha-response)区分。③ 滑块形态的 SmartCaptcha 容易被当成极验一类的滑动拼图,但它是「把滑块从左拖到右」的简单主挑战,不是拼图缺口对齐。

有什么容易踩的坑?

建议配俄罗斯或邻近地区的住宅出口使用 —— 从远端 IP 过来本身就是它的降分信号,会显著提高附加挑战出现的概率

多少钱一次,失败扣不扣?

$4.58 / 1K 次。按成功计费 —— 没解出来一律退款,所以失败不花钱。账单按次记,标价按每千次是为了让量级读得出来。

开始接入

一个端点覆盖全部验证码类型,按成功计费,失败与空结果一律退款。