简介:面向编程新手与RPA使用者,这份代码包演示了将Python与影刀RPA结合,快速完成数据抓取、清洗并写入Excel的自动化流程。相比纯Python繁琐的库与格式处理,影刀RPA的可视化指令大幅降低门槛,而需要灵活处理的环节则交给Python函数,二者优势互补。压缩包内含5个文件,包括Python脚本、HTML页面、Excel数据文件、inscode工程配置及txt说明文本,整体仅11KB,轻量且结构清晰。已有392人学习下载,适合想要在影刀RPA中调用Python、简化Excel输出的入门者。通过代码可直观看到列表变量设置、接口请求、数据清洗和Excel写入的完整实现,便于迁移应用到自己的办公自动化场景。 最近被问得最多的问题,大概就是“影刀RPA能不能跑Python代码”“Python脚本怎么和影刀配合”。我在做流程自动化的这几年里,影刀RPA和Python一直是我项目里的标配,影刀负责跟页面打交道,Python负责动脑子算数据,两者分开都不难,难的是怎么把它们无缝接起来。这篇我就把实际项目里验证过的那套做法完整放出来,从环境配置到代码示例,再到我踩过的那些坑,适合刚接触影刀的新手,也适合已经在做影刀项目、想让Python深度参与的开发者。
先说清楚为什么非要这么组。RPA解决的是重复人工操作问题,把浏览器点击、Excel处理、系统切换这些流程固化成自动化脚本。但真实业务里光有流程还不够,比如你自动抓了一批订单数据,接下来要做去重、缺失值补全、分组汇总,纯靠影刀内置的字符串处理和Excel命令,能做但极其痛苦;再比如要做登录请求的签名算法、要对接验证码识别服务、要解析PDF里的表格,RPA自带的那些轻量脚本能力完全不够看。这时候把Python接进来,等于给RPA装了一个外接大脑,影刀负责“手”,Python负责“脑”,这个组合基本能覆盖90%的办公自动化场景。
1. 整体思路:Python和影刀RPA到底怎么分工
1.1 两种工具的本质差异
影刀RPA是一款国产RPA工具,核心优势是“可视化编排流程”。你不需要写太多代码,拖拽积木就能让程序去操作网页、桌面软件、Excel、数据库,而且它内置了很多人性化命令,比如“获取网页元素文本”“点击按钮”“写入Excel单元格”,对非程序员非常友好。Python则完全不同,它是一门口碑极好的通用编程语言,生态非常庞大,数据处理有pandas和numpy,爬虫有requests和scrapy,办公文档有openpyxl和python-docx,人工智能方向更是绕不开它。
两者的差异决定了各自的定位。RPA的优势在于“稳定操控界面”:它能处理验证码弹窗、能等待页面加载、能识别网页上的各种元素,这些用Python写selenium或pywinauto也能做,但复杂度高很多,而且对于动态网页、内嵌Frame、弹层这类情况,写选择器要写到怀疑人生。Python的优势在于“复杂逻辑计算”:一个几万行的Excel,RPA去逐行读单元格、再逐行写公式,慢得离谱,而Python用pandas一句话就能完成数据清洗和透视;接口调用、加密算法、机器学习模型推理这些,RPA更是完全没办法做。
所以我的结论是:不要让RPA去做它不擅长的事,也不要用Python硬写UI自动化。正确姿势是——影刀负责把人从重复的界面操作里解放出来,Python负责把影刀拿到的数据变成真正能用的结果。
1.2 三种结合方式先看全景
根据项目的复杂度,Python和影刀结合有几种不同层级的方式,我列个表对比一下,这样你对方案选型有名目:
| 结合方式 | 实现路径 | 适合场景 | 复杂度 |
|---|---|---|---|
| 方式一:内置Python命令 | 在影刀流程里直接添加“Python代码”命令,写一段Python代码并运行 | 简单数据清洗、正则提取、文件重命名、字符串处理 | 低 |
| 方式二:运行外部Python脚本 | 影刀通过命令调用一个.py文件,可传参、可接收输出 | 逻辑较复杂、需要复用已有Python代码、需要第三方库 | 中 |
| 方式三:打包exe给影刀调用 | 用PyInstaller把Python程序打包成exe,影刀用“运行程序”命令调用 | 目标机器没装Python环境、需要交付给同事/客户 | 中高 |
你在影刀里会看到一个区别:它自带“Python代码”命令和“运行Python脚本”命令两种。前者是在影刀内置的Python解释器里直接写代码,适合几十行的小逻辑;后者是调用外部的一个.py文件,那个脚本可以用你自己的Python环境来跑,能用上本机安装的所有第三方库。这个区别是很多新手第一道坎,后面我会重点讲。
2. 环境准备:搞不定Python版本,后面全是白搭
2.1 安装Python和配置影刀解释器
这一步听起来基础,但“影刀RPA 设置python版本”是我被问得最频繁的问题之一。很多人直接从网上下了一个Python装完,然后影刀里跑代码一直报错,就是因为影刀默认用的解释器和你装的环境不是同一个。
先装Python。去官网下载Python 3.8或3.10版本,安装时一定要勾选“Add Python to PATH”,这个选项不勾,后续在命令行里敲Python会提示“不是内部或外部命令”。安装完成后打开命令行验证一下:
python --version pip --version能看到版本号就算装好了。接下来打开影刀RPA编辑器,在设置面板里找到Python解释器配置。影刀通常会让你选择“使用内置Python引擎”还是“使用本地Python解释器”,这里建议直接选本地解释器,然后浏览到你刚才安装的python.exe路径。为什么不用内置引擎?因为内置引擎只带了一些基础库,你想用pandas、requests、openpyxl这些都得重新装,而且装的时候往往会装错地方,最后代码里import时报ModuleNotFoundError,排查到崩溃。用本地解释器,等于直接复用你自己精心维护的Python环境,所有包都是现成的。
这里有一个特别重要的点:影刀里配置Python版本时,注意看是32位还是64位。如果你的影刀是32位的,而Python装的是64位,解释器路径填进去也跑不起来,会报“架构不匹配”。这个属于少见的坑,但我真实遇到过,一度以为是影刀坏了。
2.2 依赖库安装和pip换源
装好解释器后,按项目需求装第三方库。基本上我的影刀项目里必装的有这几个:
pip install pandas openpyxl requests beautifulsoup4 lxml在真实的办公自动化项目里,pandas处理表格数据、openpyxl操作Excel、requests调HTTP接口、BeautifulSoup解析HTML,这四个是最高频的组合。如果你是做网页数据采集,再加一个DrissionPage或Playwright,比selenium更好用,而且和影刀的浏览器操作逻辑互补。
国内网络环境下pip安装经常慢到怀疑人生,我一般先把pip源换成清华镜像:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple换完源之后装包的速度会快很多。还有个检查技巧:如果你装了某个包但Python代码一运行就报找不到,先确认是不是装到了别的解释器里。在影刀里跑一行代码片段,打印sys.executable和sys.path,看看当前解释器路径到底是不是你配置的那个,这个习惯能帮你省掉大量排查时间。
3. 实战环节一:影刀里直接跑Python代码实现数据处理
3.1 基础案例:用Python命令清洗订单数据
假设一个场景:影刀从某个后台系统里采到了一批订单列表,数据存到了变量order_list里,格式是包含订单编号、金额、客户姓名、备注的字典列表。接下来要做的是把金额列转成数字、去掉金额异常的值、按订单号去重。如果这个逻辑用影刀的命令来实现,你需要循环、判断、拆分字符串、拼新列表,光是节点就要拖十几个。而用Python命令,整个逻辑就几行。
在影刀流程中,添加一个“Python代码”命令,代码区内输入:
import pandas as pd df = pd.DataFrame(order_list) df["amount"] = pd.to_numeric(df["amount"], errors="coerce") df = df.dropna(subset=["amount"]) df = df[df["amount"] > 0] df = df.drop_duplicates(subset=["order_no"], keep="first") result_list = df.to_dict("records")影刀会把外部变量order_list自动注入到这个Python代码的上下文里,运行完后,你只需要再添加一个“Python代码结束”命令,把变量result_list的值获取出来,返回给影刀的变量。这就是“影刀负责采集数据,Python负责清洗”的最典型用法,整个流程不会多出一个额外文件,非常适合处理简单的数据转换。
这种内置命令方式的限制在于:代码写多了之后,影刀界面里的编辑体验并不好,没有代码补全、没有调试断点,而且代码没法复用。所以我的习惯是,超过30行的Python逻辑,一律丢到外部.py脚本里,用“运行Python脚本”命令来调。
3.2 进阶案例:运行外部Python脚本并传参
外部脚本方式的核心思路是:影刀把数据作为参数传给Python脚本,Python脚本处理完,再把结果输出出来。这个模式下Python脚本可以写得非常完整,可以import任何库,可以在VSCode或PyCharm里调试。
来看一个完整示例。假设影刀在一个网站列表页采集了100行商品数据,现在要让Python计算出每个商品的毛利率和排序,并将结果写回影刀变量。首先在本地写一个脚本profit_calc.py:
import sys import json def main(): # 从标准输入读取影刀传过来的json数据 raw = sys.stdin.read() if not raw.strip(): print(json.dumps({"code": 1, "msg": "no input data"})) return items = json.loads(raw) result = [] for item in items: price = float(item.get("price", 0)) cost = float(item.get("cost", 0)) profit = round(price - cost, 2) profit_rate = round(profit / price * 100, 2) if price else 0 result.append({ "name": item.get("name"), "profit": profit, "profit_rate": profit_rate }) # 按利润率从高到低排序 result.sort(key=lambda x: x["profit_rate"], reverse=True) print(json.dumps({"code": 0, "data": result}, ensure_ascii=False)) if __name__ == "__main__": main()然后影刀流程里添加“运行Python脚本”命令,脚本路径填这个.py文件的绝对路径,运行时参数区域留空。关键点是:影刀和这个脚本之间的数据交换,我用的是“标准输入输入数据 + 标准输出返回结果”这套组合。影刀先把商品数据转成JSON字符串写入临时文件,然后通过命令行的管道方式传给Python脚本。Python脚本用sys.stdin.read()读取数据,而结果用print输出,影刀再捕获这个输出并解析成变量。
这个模式需要注意一个非常容易踩的坑:中文编码。Windows下Python脚本print中文,影刀捕获输出时经常会出现乱码。解决办法是写脚本的时候统一声明编码:
import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')或者在影刀调用命令时设置环境变量PYTHONIOENCODING=utf-8。我在项目里两种方式都验证过,写脚本头部的办法最稳定。
4. 实战环节二:影刀采集 + Python分析,打通完整流程
4.1 真实场景:导出数据后做多维统计
上面说的都是“实时调用”,还有一种更常见的流程是“先采集,再集中处理”。比如影刀每天定时登录一个后台系统,把前一天的销售明细导出成Excel或存到数据库,每天几千行。然后Python在固定时间跑一个分析脚本,生成日报表、周报表、异常告警清单,再让影刀把这些报表通过邮件或企业微信发出去。这种异步模式的好处是:RPA执行时间窗口短,不容易被各种弹窗和网络波动卡住;Python分析脚本也可以独立测试、独立重算,不会因为页面变化而中断。
在这个模式下,我常用的方式是Python脚本从影刀写入的中间文件读取数据。影刀把采集结果统一存到一个固定的source_data目录,Python脚本负责扫描目录、处理数据、输出分析结果。简单示例:
import glob import pandas as pd from datetime import datetime, timedelta today = datetime.now().strftime("%Y-%m-%d") files = glob.glob(f"source_data/*_{today}.json") if not files: print("no data files today") exit(1) # 合并所有文件 frames = [] for f in files: df = pd.read_json(f, encoding="utf-8") frames.append(df) df_all = pd.concat(frames, ignore_index=True) # 按月汇总 df_all["month"] = pd.to_datetime(df_all["order_date"]).dt.to_period("M") monthly = df_all.groupby(["month", "product_line"])["amount"].sum().reset_index() # 输出异常订单(金额为负、客户为空) abnormal = df_all[(df_all["amount"] < 0) | df_all["customer"].isna()] result = { "monthly_summary": monthly.to_dict("records"), "abnormal_count": len(abnormal), "abnormal_detail": abnormal.to_dict("records")[:20] } with open(f"output/report_{today}.json", "w", encoding="utf-8") as f: json.dump(result, f, ensure_ascii=False, indent=2)这个脚本的输入输出都是文件,完全解耦。影刀只负责“拿到数据放好”,Python只负责“读取数据算好”,影刀下一步再负责“把结果发出去”,三个环节互不阻塞,哪里出问题了单独改哪里,这个架构在长期运行的自动化项目里极其重要。
4.2 数据交换格式统一用JSON
不管是实时调用还是文件模式,我都会把数据格式统一成JSON。为什么不用CSV或Excel?因为JSON能保留数据类型和嵌套结构,Python可以直接json.loads还原成列表或字典,完全无痛。在处理复杂结构时,比如一个客户对应多条订单、订单里还有明细项,CSV展开会非常痛苦,而JSON天然支持嵌套。
影刀侧生成JSON也很方便,它内置的“变量转JSON”命令可以直接把列表变量转成JSON字符串。反过来,Python返回的JSON字符串,影刀侧也有“JSON解析”命令可以转回变量。整个数据链路如下:
影刀变量(列表/字典) -> JSON字符串 -> Python(json.loads) -> 处理 -> json.dumps -> 影刀(JSON解析) -> 影刀变量只要中间层保持JSON字符串,两边的数据模型就能自由对接,这是我这几年总结出来的一套稳定模式。
5. 实战环节三:让Python处理影刀搞不定的技术活
5.1 接口签名和加密请求
影刀RPA在处理网页操作时很强,但遇到需要“调接口”的场景就有点尴尬。比如有些后台系统,登录时要对密码做MD5再加盐,请求时要按参数生成签名,影刀的命令面板里连常规的MD5和HMAC命令都不好找,写起来也很别扭。这种活交给Python就是降维打击。
我在一个项目里处理过这样的场景:影刀要从一个内部系统拉取数据,但那个系统有签名校验,要求将当前时间戳、一个固定token和请求体拼接后做SHA256,再放到Header里。影刀里的解决方式很绕,而用Python脚本就非常清晰:
import hashlib import time import requests import json api_url = "https://example.internal/api/query" token = "your-secret-token" def build_sign(param_dict): ts = str(int(time.time() * 1000)) body = json.dumps(param_dict, sort_keys=True, ensure_ascii=False) raw = f"{ts}{body}{token}" sign = hashlib.sha256(raw.encode("utf-8")).hexdigest() return ts, sign payload = {"start_date": "2024-01-01", "end_date": "2024-01-31"} ts, sign = build_sign(payload) headers = {"X-Timestamp": ts, "X-Sign": sign, "Content-Type": "application/json"} resp = requests.post(api_url, json=payload, headers=headers, timeout=10) data = resp.json() print(json.dumps(data, ensure_ascii=False))影刀流程里只需要收集参数、调用这个脚本、接收输出,签名逻辑和请求细节全部封装在Python里,后续接口变动只改Python脚本,不动影刀流程,维护成本低很多。
5.2 OCR识别和复杂文档处理
另一个典型场景是OCR。影刀自带“图片识别文字”的功能,但识别率只能算能用,对复杂表格、手写体、低清晰度截图效果一般。Python生态里可以对接百度OCR、讯飞OCR、PaddleOCR等,识别精度明显更高,还能直接输出结构化文本。比如财税单据识别,PaddleOCR配合PP-Structure模型,能直接把表格区域和单元格坐标提取出来,影刀再做后续自动化落库就容易多了。
我在影刀里调PaddleOCR的方式是:先用影刀截图命令获取目标区域的图片,保存到本地,然后运行Python脚本对图片做OCR识别,识别出的文本写入JSON文件,影刀再读取文件各字段。因为OCR是个耗时操作,第一次加载模型可能要十几秒,所以不建议用实时调用方式,而是用文件接力模式,影刀先截图像、后轮询结果,这样不会把整个流程卡死。
这类“技术活”本质上没有标准答案,但经验法则是:遇到RPA命令面板里没有现成功能、或者实现起来逻辑很长的需求,就直接考虑用Python脚本补齐,不要硬在影刀里凑。
6. 常见问题与排查技巧实录
6.1 高频报错速查表
下面这些是我在影刀和Python结合项目里遇到过的高频问题,整理成一张速查表,按图索骥基本能解决一大半:
| 现象 | 根本原因 | 解决方案 |
|---|---|---|
| 影刀运行Python命令提示“python不是内部或外部命令” | Python未安装或未加入PATH | 重新安装Python并勾选“Add to PATH”,安装后重启影刀 |
| import pandas报ModuleNotFoundError | pip装到了另一个Python环境 | 检查解释器路径,用python -m pip install确保正确安装 |
| 影刀捕获到的中文全是乱码 | Windows下stdout编码问题 | Python脚本开头设置sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') |
| 配置解释器后提示架构不匹配 | 影刀和Python位数不一致 | 统一安装32位或64位版本,尽量用64位 |
| 运行外部脚本没反应,不报错也不输出 | 脚本内异常被吞掉 | 脚本外层加try/except,print堆栈信息,或写日志文件 |
| 传进去的数据量大,脚本处理很久,影刀流程超时 | 子进程执行时间过长 | 增加脚本超时时间;或改用文件接力模式,异步处理 |
| Python脚本里用的临时文件被占用 | 影刀还在读取文件时脚本就尝试写入 | 合理规划文件读写顺序,先完全写入再读取,加延时或文件锁 |
6.2 几个值得特别留意的隐蔽坑
第一个坑是“解释器选错”。影刀的“运行Python脚本”命令和“Python代码”命令,默认可能用不同的解释器。你配置了本地解释器,但内置Python代码命令依然走内置引擎,导致两个方式里能import的包不一致。检查办法很简单:分别在两种命令里打印sys.executable,看到路径不同,就去设置里把两个地方的解释器都统一配置一遍。
第二个坑是“路径带空格和中文”。Windows下常见路径如C:\Users\张三\Desktop\项目 v2\script.py,影刀调用外部脚本时不加引号会解析出错。一个稳妥习惯是:所有脚本和中间数据都放到一个纯英文、无空格的目录下,比如D:\AutoProject\scripts\和D:\AutoProject\data\,从根上避开这个坑。如果确实改不了路径,就在影刀的命令行参数里手动给路径加双引号。
第三个坑是“print输出截断”。影刀捕获外部脚本的print输出时,如果输出内容特别长,可能只拿到前一部分。解决办法:最终结果不要靠print打印完整数据,而是让Python脚本把结果写到文件,print只输出一个成功标志或文件路径。这个方案在数据量大的时候几乎不会出问题,也更好排查。
还有一个容易被忽略的点:用影子表达式处理Excel文件时,如果Excel正被用户打开着,Python用openpyxl去写会报权限错误。这时候要么提示用户关闭Excel,要么Python脚本里先用filelock做判断,要么干脆复制一份副本再处理,影刀流程设计时就要把文件占用这个场景考虑进去。
6.3 用日志文件替代print调试
调试Python和影刀结合的问题,靠print看影刀日志实在太痛苦。我现在所有给影刀用的Python脚本,开头都会初始化一个日志配置,把运行过程写到一个日志文件里:
import logging logging.basicConfig( filename=r"D:\AutoProject\logs\python_script.log", level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s", encoding="utf-8" ) logger = logging.getLogger(__name__)然后在脚本关键节点用logger.info()记录。影刀流程跑完,如果结果不对,先去看日志,最后几步干了什么一目了然。这个习惯帮我省了无数次“瞎子摸象”式排查。如果你不想写文件,也可以用print(..., file=sys.stderr)把调试信息输出到错误流,影刀的错误日志里能看到,但要注意混淆。
7. 写在最后的实操心得
做影刀和Python结合这么久,我的核心体会是:影刀RPA是一个出色的“操作员”,它强在能模拟人操作各种系统,但它不是一个“计算器”,复杂的逻辑处理还是要交给Python。设计自动化流程时,先把需求拆成“哪些是界面操作”“哪些是数据处理”,界面操作尽量用影刀,数据处理尽量集中到Python,这样做出来的流程才稳定、好维护、不容易随着业务变化而散架。
一个小技巧送给大家:把项目里所有Python脚本统一放到一个固定的scripts目录,按功能命名,比如clean_orders.py、calculate_commission.py、ocr_receipt.py,每个脚本的输入输出都走固定的数据目录。这样哪怕半年后再打开这个项目,也不需要回忆当时的代码在哪,直接看目录结构就能重建整个自动化流程。
如果你手里也有正在做的影刀项目卡在数据处理这一环,试着把Python接进来,别自己硬啃RPA的命令组合。第一次打通之后,你大概率会回不去纯影刀开发。
本文还有配套的精品资源,点击获取