影刀RPA完全指南:截图与OCR文字识别的四种方式对比

网页元素能定位到的时候一切好说,但总有那么些场景——验证码、系统弹窗、客户端软件界面、远程桌面——这些地方没有DOM元素可定位,只能靠截图+OCR。"截图+OCR"这个组合在影刀RPA中是处理非浏览器场景的核心手段。

影刀RPA至少提供了四种获取和识别图像文字的方式,每种方式的适用场景、准确率和性能差异很大。选对了方案,识别率90%以上;选错了方案,跑一晚上全是乱码。

我也是从一个个坑里试出来的。最早用免费OCR,中文字符识别一塌糊涂;后来换封闭场景下的精准方案,才有了可用的自动化流程。

在这里插入图片描述

四种方案的全面对比

方案一:影刀内置截图 + 内置OCR

这是最基础的方案,适合规则文本的简单场景。

  1. 拖入「截图保存」指令(在「截图」分类下)。
  2. 选择截图区域:全屏、指定窗口、自定义坐标区域。
  3. 设置的保存路径,截图存为PNG文件。
  4. 拖入「OCR文字识别」指令,选择刚保存的截图文件。
  5. 在OCR结果中提取需要的文字内容。
  6. 返回结果包含文字内容和位置坐标。

优点:无需额外配置,拖指令就能用。
缺点:识别率一般,对非标准字体、倾斜文字、低对比度文字基本无效。
在这里插入图片描述

适用场景:常规网页上的文字、Windows系统对话框、文字清晰且字体标准的场景。

方案二:元素截图 + 指定区域OCR

拼多多店群自动化报活动上架!

只截取需要的区域,减少干扰信息,提升识别准确率。

  1. 用「获取元素位置」指令获取目标元素的坐标和尺寸。
  2. 用「截图保存」指令的「自定义区域」模式,填入元素坐标。
  3. 截图后先用影刀的「图像处理」指令做预处理:灰度化、二值化、放大。
  4. 预处理后再用「OCR文字识别」指令识别。
  5. 区域截图去掉了背景干扰,识别率大幅提升。
# 影刀Python节点:图像预处理提升OCR识别率
# 使用Pillow库做二值化和降噪处理
from PIL import Image, ImageFilter, ImageEnhance

img_path = get_variable("screenshot_path")
img = Image.open(img_path)

# 转为灰度图
img = img.convert('L')

# 增强对比度(让文字更清晰)
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(2.0)

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/45e2062da896417185e41c041bff2905.png#pic_center)

# 二值化处理(将图片转为纯黑白)
threshold = 128
img = img.point(lambda p: 255 if p > threshold else 0)

# 放大2倍(提高OCR对小字的识别率)
width, height = img.size
img = img.resize((width * 2, height * 2), Image.LANCZOS)

# 保存预处理后的图片
processed_path = img_path.replace('.png', '_processed.png')
img.save(processed_path)
set_variable("processed_image", processed_path)

方案三:调用百度OCR API

影刀内置OCR能力有限,需要高精度识别时推荐接入第三方OCR服务。百度OCR的通用文字识别接口免费额度够日常使用

  1. 注册百度智能云账号,创建文字识别应用,获取API Key和Secret Key。
  2. 在影刀的Python节点中调用百度OCR的access_token接口获取Token。
  3. 读取截图文件的base64编码。
  4. 调用通用文字识别API传入图片数据。
  5. 解析返回的JSON结果,提取识别文字。
# 影刀Python节点:调用百度OCR API识别图片文字
# 注意:需要先点亮Python图标,并用pip install requests
import requests
import base64
import json

# 百度OCR配置(从影刀变量获取)
api_key = get_variable("baidu_api_key")
secret_key = get_variable("baidu_secret_key")

# 第一步:获取access_token
token_url = "https://aip.baidubce.com/oauth/2.0/token"
token_params = {
    "grant_type": "client_credentials",
    "client_id": api_key,
    "client_secret": secret_key
}
token_resp = requests.post(token_url, params=token_params)
access_token = token_resp.json().get("access_token")

# 第二步:读取图片并Base64编码
image_path = get_variable("screenshot_path")
with open(image_path, "rb") as f:
    image_base64 = base64.b64encode(f.read()).decode("utf-8")

# 第三步:调用通用文字识别接口
ocr_url = f"https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
ocr_params = {"access_token": access_token}
ocr_data = {
    "image": image_base64,
    "detect_direction": True,        # 检测文字方向
    "language_type": "CHN_ENG",      # 中英文混合
    "paragraph": False               # 不按段落输出
}
ocr_resp = requests.post(ocr_url, params=ocr_params, data=ocr_data)
result = ocr_resp.json()

# 第四步:提取识别结果
words_list = []
for item in result.get("words_result", []):
    words_list.append(item.get("words", ""))

recognized_text = "\n".join(words_list)
set_variable("ocr_result", recognized_text)
set_variable("ocr_confidence", json.dumps(result, ensure_ascii=False))

优点:识别率极高(95%+),支持中英文混合、竖排文字、手写体。

缺点:需要联网,有调用频率限制(免费版每天50000次),涉及费用(超出免费配额后)。

在这里插入图片描述

方案四:影刀魔法指令OCR

影刀的「魔法指令」是对第三方服务的封装,包括OCR识别。

  1. 在指令面板搜索框输入"魔法指令"。
  2. 找到「调用魔法指令」拖入流程。
  3. 在魔法指令列表中搜索"OCR"或"文字识别"。
  4. 选择具体的OCR服务(影刀内置了多个OCR提供方)。
  5. 按指令要求传入截图文件路径或图片URL。

优点:不需要写代码,不需要申请API密钥,影刀内置集成。
缺点:可能需要付费或消耗影刀积分,不同OCR提供方的识别效果差异大。

截图策略的选择

在这里插入图片描述

不同场景选不同截图方式,直接影响OCR效果。

全屏截图与窗口截图

截图方式 适用场景 注意事项
全屏截图 需要完整屏幕信息,如验证码在整个页面中 文件大,OCR需指定区域
指定窗口 针对特定应用窗口,如微信聊天窗口 窗口标题需精确匹配
自定义区域 精准截取文字区域,提升OCR识别率 需要提前知道坐标

截图的时机控制

这里很容易踩坑:页面还没加载完就截图,截到的是空白页或加载中的动画,OCR自然什么都识别不到。

在这里插入图片描述

  1. 截图前加「等待元素」指令,等待目标区域出现。
  2. 元素出现后再等500ms-1000ms(让渲染稳定)。
  3. 使用影刀的「截图保存」指令时选择"当前可见区域",避免截到屏幕外的内容。

实际应用场景

TEMU店群矩阵自动化运营核价报活动

场景:动态验证码自动识别

  1. 用「等待元素」等验证码图片加载完成。

  2. 用「截图保存」截取验证码图片区域。

  3. 调用百度OCR或影刀魔法指令识别验证码。

  4. 将识别结果填入输入框。

  5. 在这里插入图片描述

  6. 提交验证。

如果验证码太复杂(如滑块的),OCR方案就不适用了,需要改用专门的打码平台接入方案。

场景:Windows客户端数据采集

有些企业软件没有网页版,只有Windows客户端。此时只能用截图+OCR。

  1. 用「激活窗口」指令将目标窗口置顶。
  2. 用「截图保存」截取窗口特定区域。
  3. OCR识别出数据后,用「模拟按键」或「鼠标点击」做下一步操作。
  4. 循环以上步骤遍历所有数据行。

常见问题/易错速查

问题1:OCR识别中文全是乱码或问号
OCR引擎的语言设置不对。在影刀的OCR指令中检查「识别语言」参数,中文选「CHN」或「CHN_ENG」(中英文混合)。如果默认只有英文,需要额外安装中文语言包。
在这里插入图片描述

问题2:截图到的是空白区域
窗口被其他窗口遮挡或窗口处于最小化状态。在截图前用「激活窗口」指令把目标窗口置顶并恢复大小。如果在非桌面环境下运行(如远程桌面断开),截图功能会失效。

问题3:百度OCR提示"image format error"
图片Base64编码有问题。检查图片文件是否完整,Base64编码时是否包含了data:image前缀(API不需要前缀,只传纯Base64字符串)。

问题4:验证码OCR识别率极低
验证码本身就是设计来防OCR的。降低期望值,考虑改用打码平台(如超级鹰、图鉴)的影刀魔法指令集成。或者采用人工打码——影刀的流程可以用「输入框弹窗」指令暂停,让操作者手动输入验证码后继续。

推荐资源

  • 百度智能云OCR控制台:查看调用量、剩余额度、API文档
  • Pillow库官方文档:图像预处理的完整API参考
  • 影刀魔法指令市场:搜索OCR相关魔法指令,查看用户评价和适用场景

作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
在这里插入图片描述

内容标签:#影刀RPA #截图 #OCR #文字识别 #百度OCR #图像预处理 #魔法指令 #验证码
在这里插入图片描述

更多推荐