采集时突然弹出滑块验证码、图形验证码、短信验证码,流程直接卡死。
问题:验证码是自动化最大的拦路虎。
解决方法:根据验证码类型选择不同方案——打码平台、手动介入、OCR识别、短信转发。
一、验证码的四种类型与应对策略
| 验证码类型 | 常见平台 | 推荐方案 | 成本 |
|---|---|---|---|
| 图形数字/字母 | 登录、注册 | 打码平台API | 0.5-2分/次 |
| 滑块拼图 | 淘宝、拼多多 | 打码平台(如超级鹰)或手动 | 2-5分/次 |
| 文字点选 | 京东、12306 | 打码平台(如数美) | 5-10分/次 |
| 短信验证码 | 手机绑定、登录 | 接码平台或转发 | 0.1-1元/条 |
优先顺序:
能避免就避免(如保持登录态) → 手动介入 → 打码平台 → 放弃该账号
二、方案一:避免验证码(最省心)
验证码出现是因为触发风控。降低触发概率比处理验证码更高效。
策略1:保持登录态
不频繁登出登录,用浏览器用户数据目录保存Cookie,一个月登录一次。
策略2:降低操作速度
每次点击、翻页间隔随机化(2~5秒),不要固定1秒一次。
策略3:限制单次采集量
淘宝一次采10页以内,不要贪多。
策略4:使用高质量代理
住宅代理比机房代理触发概率低。
三、方案二:手动介入(半自动,适合低频)
场景:每天只跑一次,验证码偶尔出现。流程遇到验证码暂停,等你手动处理完再继续。
实现方式:
在流程中判断验证码是否出现,如果出现,弹窗提示并等待人工处理。
# 判断验证码弹窗是否出现
# 捕获元素:验证码弹窗的关闭按钮或验证码图片
# 如果验证码出现:
# 1. 输出日志:“验证码出现,等待人工处理”
# 2. 弹窗提示:“请手动完成验证码,完成后点击确定”
# 指令:弹窗提示(带“确定”按钮)
# 3. 固定等待(等人处理完)
# 4. 继续流程
# 如果没出现,正常执行
弹窗指令:指令面板搜索“弹窗提示”或“消息框”。
设置标题、内容、按钮(确定/取消)。
缺点:需要人守在电脑前。
四、方案三:打码平台(全自动,推荐)
原理:把验证码截图发送到打码平台,平台返回识别结果,影刀自动填入。
常用打码平台:
- 超级鹰(支持图形、滑块、坐标点选)
- 图鉴(便宜,识别率尚可)
- 云打码(老牌)
- 2Captcha(国际平台,支持reCAPTCHA)
以超级鹰为例的集成流程:
# 步骤1:截图验证码区域
# 捕获验证码图片元素(img标签或div背景)
# 屏幕截图 → 截取该元素区域 → 保存到本地 temp_captcha.png
# 步骤2:调用超级鹰API(用Python代码)
# 需要安装 requests 库(创业版及以上)
# 发送图片,获取识别结果
# 步骤3:将识别结果填入输入框
# 输入文本(验证码输入框)→ 内容为 {captcha_result}
# 步骤4:点击提交/确认
Python代码示例(超级鹰图形验证码):
import requests
import base64
import json
# 超级鹰账号配置
username = "your_username"
password = "your_password"
soft_id = "123456" # 软件ID,注册可得
# 读取验证码图片
with open("C:\\temp\\captcha.png", "rb") as f:
img_base64 = base64.b64encode(f.read()).decode()
# 请求识别
url = "http://api.superying.cn/upload"
data = {
"user": username,
"pass": password,
"softid": soft_id,
"codetype": 1003, # 1003=英文数字验证码,其他类型查文档
"img_base64": img_base64
}
response = requests.post(url, data=data).text
result = json.loads(response)
if result["err_no"] == 0:
captcha_code = result["result"]
set_var("captcha_code", captcha_code)
else:
set_var("captcha_code", "")
滑块验证码:超级鹰需要指定坐标类型,返回的是滑块移动的像素距离,需要用ADB或鼠标拖动指令实现。
五、方案四:OCR识别(免费但识别率低)
适用:简单数字、字母验证码,无干扰线、不变形。
工具:Tesseract OCR + Python
import pytesseract
from PIL import Image
# 需要安装:pip install pytesseract pillow
# 还需要安装Tesseract引擎
img = Image.open("captcha.png")
captcha_text = pytesseract.image_to_string(img, config='--psm 8')
# --psm 8 表示单个单词,适合验证码
set_var("captcha_ocr", captcha_text.strip())
缺点:稍微复杂点的验证码(有干扰线、彩色背景)识别率低,不如打码平台。
六、短信验证码的处理
场景:登录时需要手机短信验证码。
解决方案:
方案A:接码平台
注册接码平台(如云短信、接码号),获取临时手机号,平台会显示收到的短信内容。
影刀通过接码平台的API获取验证码。
方案B:邮件/短信转发
如果是自己的手机号,可以设置短信转发到邮箱(如iPhone的“短信转发”+ 企业微信机器人),然后影刀读取邮箱内容提取验证码。
方案C:手动输入
低频场景,弹窗提示让用户手动输入验证码。
# 弹窗输入验证码
# 指令:输入对话框
# 标题:“请输入手机验证码”
# 输出到:{sms_code}
七、实战:集成打码平台的翻页采集流程
A_Main
├─ 1. 打开网页、登录
├─ 2. 条件循环(翻页)
│ ├─ 采集当前页数据
│ ├─ 点击下一页
│ ├─ 判断是否出现验证码
│ │ ├─ 如果出现:调用子流程 C_HandleCaptcha
│ │ └─ 如果成功处理,继续;否则跳出循环
│ └─ 等待页面加载
└─ 3. 保存数据
C_HandleCaptcha(子流程)
├─ 1. 截图验证码区域
├─ 2. 调用超级鹰API识别
├─ 3. 输入验证码
├─ 4. 点击确认
├─ 5. 等待验证结果
│ ├─ 如果成功:返回成功标志
│ └─ 如果失败:重试(最多3次)
└─ 6. 返回
八、避坑指南
| 坑 | 说明 | 解决方法 |
|---|---|---|
| 验证码截图区域不对 | 截到了整个页面或空白 | 先捕获验证码图片元素,指定元素截图 |
| 打码平台识别慢 | 网络或平台问题 | 设置超时时间(10-15秒),超时后重试 |
| 滑块验证码移动不准确 | 坐标计算错误 | 使用“鼠标拖动”指令,起点和终点坐标精确 |
| 频繁调用打码被风控 | 同一IP大量请求 | 轮换代理IP |
| 验证码处理完流程找不到后续元素 | 页面刷新了 | 重新获取页面对象或刷新元素列表 |
影刀截图指定元素:
屏幕截图指令 → 截图区域选择“指定元素” → 捕获验证码图片所在的元素(不是弹窗,是图片本身)。
九、影刀专属操作清单
| 操作 | 精确指令 | 说明 |
|---|---|---|
| 判断验证码出现 | 判断元素是否存在 | 捕获验证码弹窗或图片元素 |
| 截图验证码 | 屏幕截图 → 指定元素 | 截取验证码图片区域 |
| 弹窗提示等待人工 | 弹窗提示 或 输入对话框 | 半自动方案 |
| 模拟输入验证码 | 输入文本 | 填入识别结果 |
| 滑块拖动 | 鼠标拖动 或 模拟移动点击 | 需要坐标 |
| Python调用API | Python代码 | 发送打码平台请求 |
版本差异:社区版打码平台需要自己写Python代码,不支持内置插件。
创业版有官方打码插件(需额外付费),可简化集成。
常见问题速查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 超级鹰返回“图片大小超限” | 截图太大 | 先压缩图片再base64 |
| 滑块验证码移动后还是失败 | 轨迹太机械 | 随机加点停顿和偏移 |
| 短信验证码收不到 | 号码被运营商拦截 | 换接码平台或用真实手机号 |
| 验证码处理完继续报错 | 页面状态已变 | 重新获取元素或刷新页面 |
推荐资源
- 超级鹰官网:http://www.chaojiying.com(注册有免费测试积分)
- 影刀学院课程:《验证码处理全攻略》(约20分钟)
- 接码平台推荐:云短信、5sim(国际)
最后一句:验证码处理是RPA进阶的必修课。
最简单的方案是“保持登录态”避免验证码;必须处理时,打码平台最省心。
花几块钱买几百次识别积分,能省下大量人工盯着的时间。
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
