影刀RPA 流程模板化设计:做一个能复用的流程框架
影刀RPA 流程模板化设计做一个能复用的流程框架每接一个新项目都从零开始搭流程——这叫手工作坊模式。聪明人会逐渐沉淀出一套自己的流程模板新项目往里填业务逻辑就行了。这篇文章教你从零搭建一个可复用的流程框架。模板化是什么先看对比没有模板时 新项目 → 新建流程文件 → 从头搭登录、日志、错误处理... 工作量的60%是在做重复的基础搭建 有模板时 新项目 → 复制模板文件 → 填写业务逻辑 → 调整配置 → 上线 工作量的20%是基础搭建80%是业务逻辑模板化不是做一个万能流程而是把稳定的部分登录、日志、异常处理、配置加载固化成模板业务逻辑留空。标准流程模板的结构一个项目的标准骨架拼多多店群自动化报活动上架project_template/ config/ settings.json ← 配置文件账号、URL、开关等 subflows/ 01_login.flow ← 登录子流程 02_check_result.flow ← 结果校验子流程 03_send_notify.flow ← 通知子流程 modules/ logger.py ← 日志模块Python data_validator.py ← 数据校验模块Python api_client.py ← API调用模块Python main.flow ← 主流程调度main.flow主流程骨架主流程模板 main.flow 阶段0初始化 【读取全局变量】→ 环境标识TEST / PROD 【加载配置文件】→ settings.json 【初始化日志】→ Python节点生成日志文件 阶段1登录 【运行子流程】→ 01_login.flow 出参login_success IF NOT login_success: 【日志输出】登录失败流程终止 【终止流程】 阶段2业务处理 这里写你的业务逻辑 采集、处理、写入... 阶段3结果校验 【运行子流程】→ 02_check_result.flow 入参业务处理结果 出参check_pass, check_msg 阶段4通知 【运行子流程】→ 03_send_notify.flow 入参本次执行的汇总信息 阶段5收尾 【日志输出】→ 执行汇总 【清理临时文件】核心思想登录、校验、通知这些每次都要做的环节固定下来中间的业务部分每次换。配置文件的模板{env:TEST,browser:{headless:false,slow_mo:0},timeout:{element_wait:30,page_load:60},login:{url:https://example.com/login,username:从环境变量读取,password:从环境变量读取},business:{target_url:https://example.com/orders,date_range_days:1},notification:{email_to:bosscompany.com,on_success:true,on_failure:true},retry:{max_attempts:3,delay_seconds:30}}在Python节点中加载importjsonimportos config_pathos.path.join(os.path.dirname(__file__),config/settings.json)withopen(config_path,r,encodingutf-8)asf:configjson.load(f)# 使用envconfig[env]login_urlconfig[login][url]登录子流程模板01_login.flow 输入参数无从全局变量或配置文件读账号密码 输出参数login_success布尔值 步骤 1. 【读取配置】→ 登录URL、用户名、密码 2. 【打开网页】→ 登录URL 3. 【IF】检测是否已登录Cookie有效: 【日志输出】已有登录态跳过登录 login_success True 返回 4. 【填写】→ 用户名 5. 【填写】→ 密码 6. 【点击】→ 登录按钮 7. 【等待元素】→ 等待登录后页面出现如用户名显示在导航栏 8. 【IF】登录成功: 【保存Cookie】 login_success True ELSE: login_success False 【日志输出】登录失败关键设计——先检测是否已登录。如果Cookie还没过期直接用省一次登录流程。日志模块模板# modules/logger.pyimportosimportloggingfromdatetimeimportdatetimeclassRPALogger:def__init__(self,log_dir,flow_name):os.makedirs(log_dir,exist_okTrue)log_fileos.path.join(log_dir,f{flow_name}_{datetime.now().strftime(%Y%m%d)}.log)self.loggerlogging.getLogger(flow_name)self.logger.setLevel(logging.INFO)# 文件输出fhlogging.FileHandler(log_file,encodingutf-8)fh.setLevel(logging.INFO)formatterlogging.Formatter(%(asctime)s [%(levelname)s] %(message)s)fh.setFormatter(formatter)self.logger.addHandler(fh)definfo(self,msg):print(msg)# 同时输出到影刀控制台self.logger.info(msg)defwarning(self,msg):print(f[WARN]{msg})self.logger.warning(msg)deferror(self,msg):print(f[ERROR]{msg})self.logger.error(msg)defstep(self,step_name,status,detail):msgf[{step_name}]{status}ifdetail:msgf |{detail}self.info(msg)# 使用frommodules.loggerimportRPALogger logRPALogger(rC:\RPA_data\logs,order_sync)log.step(登录,成功)log.step(采集,完成,共采集156条)log.step(写入,完成)模板的使用方式第一步复制模板。1. 复制 project_template/ 整个目录 2. 重命名为你的项目名如 order_sync/ 3. 打开 main.flow在阶段2业务处理处填写自己的逻辑 4. 修改 config/settings.json 中的配置第二步调整配置。TEMU店群矩阵自动化运营核价报活动几个必定要改的配置项login.url目标系统登录地址business.target_url业务处理的起始页面notification.email_to通知接收人第三步填写业务逻辑。在main.flow的阶段2位置写你的采集/处理/写入逻辑。其他地方不动。模板的持续优化模板不是一次做好就不管的。每次做完一个新项目回头看看这次在模板里写死了什么能不能提出来做配置这次做的某个子流程比如数据校验下个项目用不用得上用得上的话放到模板里。模板的某部分是不是太复杂了、几乎每次都要改考虑简化或拆分。一个好的模板在使用10个项目后会非常成熟——新项目从复制模板到跑通第一阶段可能只需要半小时。核心一句话把每次都一样的东西固化成模板给每次都不一样的东西留好接口。不要追求一个万能模板追求80%场景下能直接用的模板。作者林焱