影刀RPA进阶教程:截图与OCR文字识别在自动化中的实战应用——从识别验证码到提取页面文本
有些页面上的文字,不是真实的DOM元素,而是一张图片。
验证码是图片、电商主图上的水印是图片、部分老系统页面直接截成图片展示——这些场景下,「获取元素文本」完全没用。这时候就该截图+OCR了。
这篇文章讲清楚:影刀怎么截图、怎么调OCR、准确率怎么提升、以及不适合OCR的场景怎么绕开。

一、截图指令的四种用法
影刀的截图相关指令:
| 指令 | 作用 | 适用场景 |
|---|---|---|
| 截取元素截图 | 截某个特定元素区域 | 精准截取验证码、价格标签 |
| 截取全屏截图 | 截整个网页可视区域 | 截取整体页面做记录 |
| 截取区域截图 | 按坐标截取(左上x,y,宽,高) | 精确控制范围 |
| 获取元素截图 | 返回图片二进制数据 | 后续OCR或保存使用 |
最常用的是「截取元素截图」,精准、文件小、后续OCR准确率高。

# 截取验证码图片
截取元素截图("验证码图片元素") -> 验证码截图
# 保存到本地
保存图片(验证码截图, "D:\\captcha\\当前验证码.png")
二、OCR文字识别的两种方式
方式A:影刀内置OCR指令
拼多多店群自动化报活动上架!

影刀提供了「OCR识别」指令(需要企业版或创业版):
# 截取元素 → OCR识别
截取元素截图("价格标签区域") -> 截图
OCR识别(截图) -> 识别文本
输出日志(f"识别到的价格:{识别文本}")
优点是不需要额外配置,缺点是对模糊文本的准确率一般。
方式B:Python调用百度/腾讯OCR API(推荐)
影刀的Python代码指令可以调第三方OCR服务,准确率远超内置OCR。

以百度OCR为例:
import requests
import base64
# 1. 读取截图并转base64
with open(r"D:\captcha\captcha.png", "rb") as f:
img_base64 = base64.b64encode(f.read()).decode()
# 2. 调百度OCR API(需先申请API Key)
api_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
access_token = "你的access_token" # 通过API Key和Secret Key获取
response = requests.post(
api_url,
data={"image": img_base64},
params={"access_token": access_token}
)
result = response.json()
# {'words_result': [{'words': '连衣裙'}, {'words': '¥128.00'}], ...}
for item in result.get("words_result", []):
print(item["words"])
百度OCR每天有500次免费额度,个人使用完全够。
如果量更大,用腾讯OCR(每月1000次免费):
# 腾讯OCR的调用方式类似
api_url = "https://ocr.tencentcloudapi.com/"
# 需要签名认证,建议用官方SDK,代码稍长但官方有示例

三、提高OCR准确率的实战技巧
技巧1:先预处理再识别
不是截了图直接丢OCR就完事了。对图片做预处理能大幅提升准确率。
from PIL import Image, ImageFilter, ImageEnhance
# 使用PIL做图片预处理
img = Image.open(r"D:\captcha\captcha.png")
# 放大(小字识别率低的问题)
img = img.resize((img.width * 2, img.height * 2), Image.LANCZOS)
# 转灰度(去掉颜色干扰)
img = img.convert("L")
# 增强对比度(让文字更清晰)
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(2.0)
# 二值化(黑白分明,去掉噪点)
threshold = 128
img = img.point(lambda p: 255 if p > threshold else 0)
img.save(r"D:\captcha\captcha_processed.png")
预处理后的图片再丢OCR,准确率提升非常明显。特别是对付带噪点的验证码和低清晰度的截图。

技巧2:分区域截取
不要截一整张大图丢OCR。把目标区域拆小,每个小块单独识别。
# 不要这样(整张页面丢OCR,识别结果混乱)
截取全屏截图 -> 整张图
OCR识别(整张图) -> 混乱的结果
# 应该这样(每个价格标签单独截图)
获取相似元素列表("商品价格标签") -> 价格列表
遍历列表(价格列表, 价格标签):
截取元素截图(价格标签) -> 小截图
OCR识别(小截图) -> 价格文本
输出日志(价格文本)
技巧3:识别后做正则校验
OCR不是100%准确的。识别完后用正则校验,过滤掉明显错误的结果。

import re
OCR结果 = "价格¥12B.00 销量1O248"
# 提取价格(只保留数字和小数点)
价格列表 = re.findall(r'[\d]+\.[\d]+', OCR结果)
# 结果: ['12.00'] — 自动过滤掉了识别错的"12B.00"
# 提取销量(只保留纯数字)
销量列表 = re.findall(r'\d+', OCR结果)
# 结果: ['12', '00', '1', '248'] — 需要自己判断哪个是销量
四、OCR不适合的场景
OCR不是银弹,有些场景怎么调都搞不定:
TEMU店群矩阵自动化运营核价报活动
- 极度扭曲的验证码:字母字母连在一起,人眼看都费劲,OCR基本白给
- 图片上的彩色文字:文字和背景颜色相近,对比度低
- 旋转角度太大的文字:OCR一般只能处理±15度以内的倾斜
这些场景建议绕路:验证码走打码平台或人工处理,数据找API,不跟OCR死磕。
五、除了提取文字,截图还能干什么
用途1:流程执行留痕
关键步骤截图保存,出问题时快速定位:

# 关键操作前后都截图
截取全屏截图 -> 操作前截图
保存图片(操作前截图, f"D:\\日志\\{时间戳}_处理前.png")
点击元素("提交按钮")
截取全屏截图 -> 操作后截图
保存图片(操作后截图, f"D:\\日志\\{时间戳}_处理后.png")
用途2:图片对比验证
用影刀的「图片对比」指令,验证操作结果:
截取元素截图("结果展示区") -> 当前截图
# 与预期结果图对比
图片对比(当前截图, "D:\\预期结果.png") -> 相似度
如果 相似度 < 0.9: # 相似度低于90%
输出日志("操作结果不符合预期,请检查")
发送飞书通知("异常提醒", "流程执行结果异常")

六、推荐资源
- 百度OCR:ai.baidu.com/tech/ocr — 免费500次/天,注册即用
- 腾讯OCR:cloud.tencent.com/product/ocr — 免费1000次/月
- Pillow文档(Python图片处理库):影刀的Python代码指令已内置Pillow,直接
from PIL import Image即可
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。

456

被折叠的 条评论
为什么被折叠?



