Yandex SmartCaptcha
Yandex SmartCaptcha 是 Yandex(Yandex Cloud SmartCaptcha) 的主挑战是勾选框或滑块;判可疑时叠加附加挑战 —— 文字识别、剪影按序点选、万花筒拼图。也支持隐形模式。默认是一个「我不是机器人」勾选框,站点也可以配成拖动滑块。被判可疑(或站点把难度调到最高档)时再叠一道附加题:把图里的扭曲文字打出来、按指定顺序点选几个剪影图标、或者拖滑块把打散的图块拼回原图。附加题默认俄语。
接口规格
| 项目 | 值 |
|---|---|
| type | yandex_smartcaptcha |
| 必填参数 | website_urlwebsite_key |
| 可选参数 | 无 |
| 返回 | 一个 token 字符串(solution.token) |
| 怎么用这个解 | 填回表单的 smart-token |
| 价格 | $4.58 / 1K 次 —— 按成功计费,没解出来退款 |
| 厂商文档 | Yandex(Yandex Cloud SmartCaptcha) 官方文档 |
参数去页面哪里取
下面全部是可以直接照做的定位方法 —— DOM 属性名、JS 全局变量名、script 上的 query 参数。
要两个:website_url 和 website_key(Yandex 官方叫 client-side key,也就是 sitekey)。四处可取,任选其一:
- `data-sitekey` 属性 —— 自动嵌入模式下页面里有
<div class="smart-captcha" data-sitekey="……" data-hl="ru"></div>。容器 class 固定是smart-captcha,同一元素上还可能有data-hl(语言)和data-callback(全局回调函数名)。 - `smartCaptcha.render()` 的第二个参数 —— 高级模式下页面自己调
window.smartCaptcha.render(container, { sitekey: "……", invisible: true, … }),sitekey键的值就是它。隐形验证码一定走这条,因为没有可见容器可以挂属性。 - 组件脚本 URL ——
captcha.js从smartcaptcha.yandexcloud.net、captcha-api.yandex.ru或smartcaptcha.cloud.yandex.ru加载(三个域名实测返回同一份 bundle)。高级模式下 URL 上带?render=onload&onload=<函数名>。看到这个脚本就能确认是它。 - 回填位 —— 通过后组件在容器内插入
<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 容易被当成极验一类的滑动拼图,但它是「把滑块从左拖到右」的简单主挑战,不是拼图缺口对齐。
常见部署场景
- 俄语区为主:Yandex 自家服务,以及跑在 Yandex Cloud 上的俄罗斯站点
- 俄罗斯本地电商、银行与金融、票务、分类信息与政务公共服务类站点
- 合规驱动明显 —— 对标俄罗斯个人数据法 152-ФЗ 与俄央行 GOST R 57580,这是俄境内站点选它而不选 Google / Cloudflare 的主要原因
- 语言支持清单本身说明了市场范围:ru / en / be / kk / tt / uk / uz / tr(俄、白俄、哈萨克、鞑靼、乌克兰、乌兹别克、土耳其)
已知的坑
建议配俄罗斯或邻近地区的住宅出口使用 —— 从远端 IP 过来本身就是它的降分信号,会显著提高附加挑战出现的概率
token 是一次性的且有效期很短,拿到就用,别缓存复用
剪影(SILHOUETTES)和万花筒(KALEIDOSCOPE)两种附加题型、以及滑块主挑战,厂商自己都标着 Preview 阶段,站点侧行为可能变;滑块在部分设备上明确说了可能不正常
站点难度设成 Maximum 时,附加挑战无条件出现,与你的行为分数无关 —— 别据此推断自己被判成了机器人
隐形模式下页面上没有任何可见组件,只能从 window.smartCaptcha 和 render() 调用回溯 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 次。按成功计费 —— 没解出来一律退款,所以失败不花钱。账单按次记,标价按每千次是为了让量级读得出来。