影刀RPA进阶教程:全局变量与动态参数的高级用法——让流程在不同场景下自动适配
新手阶段,你的变量都在一个流程里传来传去。
稍微复杂的流程,拆了子流程之后,数据传递就乱套了。子流程A要改一个参数,子流程B也要用,你还得在每个流程里各设一遍。
全局变量就是解决这个问题的。
这篇文章讲清楚:全局变量是什么、怎么设、在什么地方用、和普通变量的区别,以及几个会让你想删库重写的坑。
一、全局变量 vs 普通变量:一句话区分
| 变量类型 | 作用范围 | 生命周期 | 典型用法 |
|---|---|---|---|
| 普通变量 | 只在当前子流程里有效 | 子流程结束就销毁 | 循环计数器、临时值 |
| 全局变量 | 整个应用的所有子流程都能读写 | 应用运行期间一直存在 | 登录状态、配置参数、执行计数 |
简单说:你要让多个子流程共享同一个值,就用全局变量。
二、如何创建全局变量
在影刀界面上创建
打开你的应用 → 点击左侧「全局变量」面板(是一个地球图标)。
点击「新建全局变量」→ 输入变量名(比如当前账号)→ 选择类型(字符串/数字/布尔/列表/字典)。
在流程里给全局变量赋值
在任意子流程里,拖入「设置变量」指令,注意选变量时切换到「全局变量」标签页:
设置全局变量 "当前账号" = "admin@example.com"拼多多店群自动化报活动上架!
在流程里读取全局变量
同样在任意子流程里,引用变量时选全局变量即可:
输出日志(全局变量.当前账号) # 输出: admin@example.com整个流程里任何位置都能读写,不用再传参数。
三、三个最实用的全局变量场景
场景1:登录态统一管理
多子流程的应用,登录状态必须全局共享。
# 子流程A:登录打开网页("https://seller.example.com")输入文本("账号输入框","user123")输入文本("密码输入框","pass456")点击元素("登录按钮")等待元素出现("首页标识",5秒)# 登录成功后设置全局状态设置全局变量"已登录"=True设置全局变量"登录账号"="user123"设置全局变量"登录时间"=当前时间()# 子流程B:数据采集(读取登录状态)如果 全局变量.已登录==False:输出日志("未登录,先执行登录流程")调用子流程("A_登录")否则:输出日志(f"当前登录账号:{全局变量.登录账号},继续采集")# 核心采集逻辑采集商品数据()子流程B不用知道登录细节,只检查全局状态就够了。这是模块化设计的正确姿势。
场景2:全局配置参数
把可能会变的值集中在全局变量里,以后改配置不用翻遍所有子流程。
# 一个地方设置所有配置设置全局变量"目标平台"="拼多多"# 字符串设置全局变量"采集页数"=10# 数字设置全局变量"最小销量阈值"=100# 数字设置全局变量"关键词列表"=["连衣裙","T恤","牛仔裤"]# 列表设置全局变量"结果文件路径"="D:\\数据\\采集结果.xlsx"# 字符串# 采集子流程里直接用关键词列表=全局变量.关键词列表 遍历列表(关键词列表,当前关键词):搜索(当前关键词)循环计数=0条件循环(循环计数<全局变量.采集页数):采集当前页(全局变量.最小销量阈值)翻页()循环计数=循环计数+1写入剩余关键词(关键词,"已完成")# 最后导出导出表格(采集表,全局变量.结果文件路径)以后要改采集页数或关键词,只改全局变量面板里的值就行,不用动流程逻辑。
场景3:执行计数器
多任务并行时,用一个全局计数器跟踪进度。
# 初始化设置全局变量"总任务数"=列表长度(任务列表)设置全局变量"已完成数"=0设置全局变量"失败数"=0# 每个任务处理完设置全局变量"已完成数"=全局变量.已完成数+1# 任务失败时设置全局变量"失败数"=全局变量.失败数+1# 所有任务结束后,汇总日志输出日志(f"执行完毕。总任务:{全局变量.总任务数},成功:{全局变量.已完成数},失败:{全局变量.失败数}")配合飞书通知推送这个统计结果,就是一套轻量级的任务监控。
四、全局变量的坑
坑1:类型混乱
全局变量没有强制类型约束。你在子流程A里设了数字类型,子流程B里不小心赋值成字符串,后面的逻辑全部崩。
解法:起名时加上类型前缀。
全局变量命名约定: num_采集页数 — 数字 str_目标平台 — 字符串 bool_已登录 — 布尔 list_关键词 — 列表 dict_账号配置 — 字典一眼就知道类型,避免赋值混乱。
坑2:忘记初始化
子流程里直接读一个还没赋值的全局变量,影刀不会报错,返回空值。但后面的判断逻辑出问题了你也查不到原因。
解法:在主流程最开头统一初始化所有全局变量。
# 主流程 — 全局变量初始化区设置全局变量"num_采集页数"=0设置全局变量"str_目标平台"=""设置全局变量"bool_已登录"=False设置全局变量"list_关键词"=[]设置全局变量"str_文件路径"=""# 然后加载配置加载配置文件()# ... 开始执行永远不要让全局变量处于「未初始化」状态。
坑3:并发读写冲突
TEMU店群矩阵自动化运营核价报活动
多个子流程同时修改同一个全局变量,后执行的会覆盖先执行的。
这个问题在单线程的影刀流程里一般不会出现,但如果你用「并发调用子流程」,就得小心。
解法:对写入全局变量的操作加「临界区」概念——用同一个子流程统一写入,其他子流程只读。
# 不要这样(每个子流程都在写)子流程A:设置全局变量"已完成数"=...子流程B:设置全局变量"已完成数"=...# 应该这样(统一写入入口)子流程:更新进度()参数:状态("成功"/"失败")内部:根据状态更新全局变量的计数器五、动态参数的玩法
动态参数是说:流程运行时才决定的参数值,而不是写死在流程里。
玩法1:从配置文件读取参数
影刀支持读取JSON配置文件:
# config.json{"平台":"拼多多","采集页数":10,"关键词":["连衣裙","T恤"],"输出路径":"D:\\数据\\pdd_result.xlsx"}# 影刀流程里读取读取JSON文件("D:\\config.json")->配置对象 设置全局变量"str_目标平台"=配置对象["平台"]设置全局变量"num_采集页数"=配置对象["采集页数"]设置全局变量"list_关键词"=配置对象["关键词"]设置全局变量"str_文件路径"=配置对象["输出路径"]改配置不用改流程,只改JSON文件就行。
玩法2:从命令行参数传值
影刀应用运行时可以接收启动参数:
# 获取启动参数启动参数=获取应用启动参数()如果 启动参数 不为空:设置全局变量"str_目标平台"=启动参数["target"]设置全局变量"num_采集页数"=整数(启动参数["pages"])这样同一个应用,不同参数就能跑不同的任务——多套店铺共用一套流程。
六、推荐资源
- 影刀官方文档:全局变量与流程参数的详细说明
- 影刀学院:《流程模块化设计实战》,路径:客户端→学院→搜索"全局变量"
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。