Power Automate 流程跑到一半被验证码卡住,最直接的解法是:给流程加一个 HTTP 操作,把验证码参数发给 CaptchaAI,轮询拿到 token,再把 token 写回原表单继续提交——全程不需要人工点验证码。
Power Automate(前身是 Flow)能自动化 Microsoft 生态和数百个第三方服务的业务流程,但遇到带 reCAPTCHA v2 的网页表单就会卡死。下面按步骤给出具体操作和参数。
适用场景:财务团队自动取供应商门户数据
一个常见场景:财务团队每天要从某个国际供应商门户里导出对账数据,门户登录页挂着 reCAPTCHA v2,人工点验证码是唯一卡点。用 Power Automate 搭这条流程之后,不需要人再守着屏幕:
- 流程接收验证码参数(sitekey、页面 URL)
- 把参数发送给 CaptchaAI
- 等待识别结果
- 用拿到的 token 完成登录,抓取数据
提示: reCAPTCHA v2 依赖 Google 脚本,国内网络偶尔会比海外服务器慢——遇到超时先调宽 Do Until 的超时时间,而不是急着排查代码。
第 1 步:新建云端流程
在 Power Automate 里新建一个 即时云流(Instant cloud flow),触发方式选 手动触发器,或者你项目里已经在用的其他触发器都可以。
给触发器加两个输入参数
在手动触发器上加两个文本输入:
| 参数 | 说明 |
|---|---|
| sitekey | 目标页面的 reCAPTCHA v2 sitekey |
| pageurl | 带验证码页面的完整 URL |
第 2 步:把验证码任务提交给 CaptchaAI
加一个 HTTP 操作(Premium 连接器),Method 选 GET,URI 填 https://ocr.captchaai.com/in.php。
查询参数:
- key —— 你的 CaptchaAI API Key
- method ——
userrecaptcha - googlekey ——
@{triggerBody()['text']}(对应 sitekey 输入) - pageurl ——
@{triggerBody()['text_1']}(对应 pageurl 输入) - json ——
1
解析响应: 再加一个 Parse JSON 操作:
Schema:
{
"type": "object",
"properties": {
"status": { "type": "integer" },
"request": { "type": "string" }
}
}
Content:@{body('HTTP')}
第 3 步:校验提交是否成功
加一个 Condition 操作,判断 @{body('Parse_JSON')?['status']} 是否等于 1:
| 结果 | 处理方式 |
|---|---|
| 否(提交失败) | 加一个 Terminate 操作,状态设为“Failed”,消息写:Submit error: @{body('Parse_JSON')?['request']} |
| 是 | 进入下面的轮询循环 |
第 4 步:搭建轮询循环
在“是”分支里,加一个 Do Until 循环:
循环条件: @{variables('solveStatus')} 不等于 pending
在循环之前先初始化两个变量:
| 变量 | 类型 | 初始值 |
|---|---|---|
| solveStatus | 字符串 | pending |
| solvedToken | 字符串 | 空 |
在 Do Until 循环内部,依次加入以下操作:
4a. 延迟等待
加一个 Delay 操作,等待 5 秒。
4b. HTTP——轮询识别结果
Method 选 GET,URI 填 https://ocr.captchaai.com/res.php。
查询参数:
- key —— 你的 CaptchaAI API Key
- action ——
get - id ——
@{body('Parse_JSON')?['request']} - json ——
1
4c. 解析 JSON——轮询响应
Schema 跟第 2 步用的一样,不用重新写。
4d. 条件判断——检查识别状态
判断条件:@{body('Parse_JSON_2')?['status']} 是否等于 1:
| 结果 | 处理方式 |
|---|---|
| 是(已识别) | 设置变量 solvedToken = @{body('Parse_JSON_2')?['request']},再设置 solveStatus = solved |
否,且 request ≠ CAPCHA_NOT_READY |
说明报错了,设置 solveStatus = error |
否,且 request = CAPCHA_NOT_READY |
还在排队中,什么都不做,循环继续下一轮 |
Do Until 循环上限设置:
| 限制项 | 取值 |
|---|---|
| Count | 20(最多轮询次数) |
| Timeout | PT3M(3 分钟) |
第 5 步:用识别出的 token 完成提交
循环结束后,加一个 Condition 检查 @{variables('solveStatus')},等于“solved”时把 @{variables('solvedToken')} 带入表单提交的 HTTP POST,或者通过邮件、Teams 消息等任意连接器发出去。
提交表单的 HTTP POST 示例:
| 设置项 | 值 |
|---|---|
| Method | POST |
| URI | 目标表单的 URL |
| Body | {"g-recaptcha-response": "@{variables('solvedToken')}", "other_field": "value"} |
不等于“solved”时,通过 Teams 或邮件发一条错误通知。
完整流程结构一览
[Manual Trigger (sitekey, pageurl)]
↓
[Initialize Variables: solveStatus, solvedToken]
↓
[HTTP: Submit to CaptchaAI /in.php]
↓
[Parse JSON]
↓
[Condition: status = 1?]
↓ Yes
[Do Until: solveStatus ≠ pending]
├── [Delay: 5 seconds]
├── [HTTP: Poll CaptchaAI /res.php]
├── [Parse JSON]
└── [Condition: Solved or Error?]
↓
[Condition: solveStatus = solved?]
↓ Yes
[HTTP: Submit form with token]
↓
[Compose: Success response]
常见故障排查
| 问题 | 原因 | 处理方式 |
|---|---|---|
| HTTP 连接器用不了 | 免费版不包含 Premium 连接器 | 升级到 Power Automate Premium,或改用自定义连接器 |
| Parse JSON 报错 | 响应体是纯文本,不是 JSON 格式 | 确认查询参数里带了 json=1 |
| 循环一直不停 | solveStatus 变量没被正确更新 |
检查每个“设置变量”操作里的变量名是否完全一致,大小写也要对上 |
| CaptchaAI 返回 403 | IP 被限制,或 API Key 填错了 | 核对 API Key;确认账户是否开启了 IP 白名单 |
| 流程整体超时 | 默认 30 天超时没问题,但单个操作超时是 2 分钟 | Do Until 的 Timeout(PT3M)已经覆盖了这种情况;不够用就调大 |
常见问题
免费版 Power Automate 能跑通这套 CaptchaAI 识别流程吗?
不能直接跑通。HTTP 连接器是 Premium 功能,免费版调用不了。如果暂时没有 Premium 许可,可以考虑用自定义连接器,或者把请求转发到 Azure Functions 再回调。
reCAPTCHA v2 依赖 Google 域名,在国内网络环境下测试会不会经常超时?
有可能比海外环境慢一些,属于正常的网络波动,不是流程逻辑的问题。建议把 Do Until 的 Timeout 和 Count 都调得宽松一点,并优先在网络出口稳定的服务器上运行这条流程。
Do Until 循环轮询了 20 次还没出结果,该怎么排查?
先看 res.php 返回的 request 字段是不是一直是 CAPCHA_NOT_READY——是的话说明还在正常排队,可以适当放宽 Count 上限;如果返回了别的错误码,就要回到第 2 步核对 googlekey、pageurl 这些参数是不是传对了。
CaptchaAI 的 API Key 应该怎么安全存储,避免写死在流程定义里?
用 Power Automate 的 环境变量,或者接入 Azure Key Vault 连接器,都能避免把 API Key 明文写进流程定义里。
除了 HTTP 连接器,能不能把 CaptchaAI 封装成自定义连接器复用?
可以,封装成一个自定义连接器(Custom Connector):
/in.php—— 提交任务/res.php—— 轮询结果
多个流程直接复用,参数和错误处理也统一维护。
相关文章
| 主题 | 文章 |
|---|---|
| 回调处理 | 如何用 API 处理 reCAPTCHA v2 回调 |
| 同站集成 | reCAPTCHA v2 与 Turnstile 同站处理 |
| 机制详解 | reCAPTCHA v2 回调机制详解 |
下一步
把验证码识别加入你的 Power Automate 工作流——获取 CaptchaAI API Key,按上面的步骤搭好流程。
相关指南:
- Zapier + CaptchaAI:无代码验证码解决方案
- Make(Integromat)+ CaptchaAI 集成
- Retool + CaptchaAI:内部工具验证码处理