文档备案控制台
免费开始使用

影刀RPA进阶教程:全局变量与动态参数的高级用法

在流程中经常需要跨子流程共享数据,比如登录后的用户信息、采集过程中动态变化的关键词、错误计数等。新手喜欢用“设置变量”到处传,结果子流程一多就乱。

核心方法:用“全局变量”存储跨流程共享的数据,用“动态参数”在运行时改变行为,两者配合实现灵活配置。

picture.image

一、全局变量 vs 普通变量 vs 流程参数

| 类型 | 作用域 | 生命周期 | 适用场景 |

picture.image |------|--------|---------|---------| | 普通变量 | 当前子流程内 | 子流程结束时销毁 | 临时计算、循环计数 | | 流程参数 | 子流程调用时传入/传出 | 随调用结束 | 子流程间显式传值 | | 全局变量 | 整个应用所有流程 | 应用运行期间一直存在 | 配置项、跨子流程状态 |

picture.image

原则:能用流程参数的优先用流程参数。只有多个不相关的子流程都需要共享同一份数据时,才用全局变量。


picture.image

二、全局变量的基础操作

设置全局变量

  1. 左侧指令面板搜索“设置全局变量”

picture.image 2. 变量名建议用大写+下划线(如CONFIG_PATH

  1. 值可以是文本、数字、列表、字典等
# 设置全局变量示例

![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/59a032f278de451289da6410d78ae469~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1782610775&x-signature=bKTCTCie2QHnBH48tgEisSQupB8%3D)
设置全局变量:APP_NAME = "拼多多采集助手"
设置全局变量:MAX_RETRY_COUNT = 3
设置全局变量:LOG_FOLDER = "C:\logs"
设置全局变量:USER_INFO = {"name": "林焱", "role": "admin"}

picture.image

获取全局变量

在其他子流程中,用“获取全局变量”指令读取。

picture.image

# 在任意子流程中
获取全局变量:MAX_RETRY_COUNT → 存入“最大重试次数”
输出日志:"最大重试次数为:{最大重试次数}"

注意: 修改全局变量用“设置全局变量”覆盖,删除用“删除全局变量”。


三、实战场景1:跨子流程共享配置

一个采集应用有多个配置项:文件保存路径、超时时间、是否启用通知。用全局变量集中管理。

# B01_InitConfig 初始化子流程
设置全局变量:EXPORT_PATH = "C:\采集结果"
设置全局变量:TIMEOUT_SECONDS = 10
设置全局变量:ENABLE_NOTIFICATION = True
设置全局变量:KEYWORDS_LIST = ["手机", "电脑", "平板"]

# C01_Collect 采集子流程
获取全局变量:TIMEOUT_SECONDS → 存入“超时”
等待元素出现://div[@class='result'],超时={超时}

# D01_Export 导出子流程
获取全局变量:EXPORT_PATH → 存入“路径”

![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/3a49a1d9249246e393543567d106450b~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1782610775&x-signature=R7zFC8tWsG9W%2FgOrlg6UWaX%2BvKE%3D)
Excel Workbook保存:文件路径={路径}

# E01_SendReport 发送报告子流程
获取全局变量:ENABLE_NOTIFICATION → 存入“是否通知”
如果 是否通知 == True
    发送飞书消息...

好处: 修改配置只用在B01_InitConfig里改一处,所有子流程自动生效。


四、实战场景2:动态控制流程行为(开关标志)

在调试或特殊情况下,想跳过某些耗时步骤,用全局变量做开关。

# 在初始化中设置调试模式
设置全局变量:DEBUG_MODE = True  # 正式运行时改为False

# C01_CollectList 采集列表
获取全局变量:DEBUG_MODE → 存入“调试中”

如果 调试中 == True
    输出日志:"调试模式:只采集前5条"
    循环固定次数:5
        # 采集逻辑
否则

![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/6e1844f92de04e9c8cfb9c69c9a137d0~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1782610775&x-signature=kajYreYlut4SXFqZhfYVS%2FIK6vo%3D)
    # 正常采集全部(循环列表)
    循环列表:商品列表
        # 采集逻辑

其他开关示例:

  • SKIP_LOGIN:跳过登录(已有cookie时)
  • SAVE_SCREENSHOT:是否保存错误截图
  • USE_MOCK_DATA:使用模拟数据测试

五、实战场景3:累加统计(成功数、失败数)

跨子流程累计采集成功和失败的数量,最后生成报告。

# B01_Init 初始化
设置全局变量:SUCCESS_COUNT = 0
设置全局变量:FAIL_COUNT = 0

# C01_CollectItem 采集单个商品(在循环中调用)
Try
    # 采集逻辑...
    # 成功时
    获取全局变量:SUCCESS_COUNT → 存入“当前成功”
    当前成功 = 当前成功 + 1
    设置全局变量:SUCCESS_COUNT = {当前成功}
Catch
    获取全局变量:FAIL_COUNT → 存入“当前失败”
    当前失败 = 当前失败 + 1
    设置全局变量:FAIL_COUNT = {当前失败}

# D01_GenerateReport 最后报告
获取全局变量:SUCCESS_COUNT → 成功数
获取全局变量:FAIL_COUNT → 失败数
输出日志:"采集完成,成功{成功数},失败{失败数}"

注意: 多个子流程同时修改同一个全局变量时,可能会有竞态条件。影刀是单线程顺序执行,一般没问题。但如果用了多线程(企业版),需要加锁。


六、实战场景4:存储复杂数据(列表、字典)

全局变量可以存列表,在多个子流程间传递和修改。

# B01_Init
设置全局变量:ERROR_LOG = []  # 空列表

# C01_CollectList 循环中
Try
    # 采集...
Catch
    获取全局变量:ERROR_LOG → 存入“错误列表”
    错误列表.append({"时间": 当前时间, "错误": 异常信息, "商品": 当前商品})
    设置全局变量:ERROR_LOG = {错误列表}

# E01_WriteErrors
获取全局变量:ERROR_LOG → 存入“错误列表”
如果 错误列表的长度 > 0
    Excel Workbook打开...
    循环列表:错误列表
        写入行数据到表格:[当前项.时间, 当前项.错误, 当前项.商品]

七、动态参数:不修改流程改变行为

不想改流程代码,只想在运行时改变某个值(比如搜索关键词)。可以用“输入参数”让用户运行前填写。

操作步骤

  1. 在主流程 A_Main 中点击“流程参数”
  2. 添加输入参数,如 关键词(文本)、采集页数(数字,默认5)
  3. 在流程中使用 {关键词}{采集页数}
  4. 发布应用时,勾选“允许用户修改输入参数”
# A_Main 中
输出日志:"开始采集,关键词:{关键词},页数:{采集页数}"

调用子流程:C01_SearchAndCollect
    输入参数:关键词={关键词},页数={采集页数}

用户运行时:
会弹出一个对话框,可以输入“苹果手机”和“10页”,不用修改流程。


八、动态参数与全局变量的结合

把用户输入的动态参数存入全局变量,供后续所有子流程使用。

# A_Main
# 假设已有输入参数:关键词, 页数, 是否导出图片

设置全局变量:CURRENT_KEYWORD = {关键词}
设置全局变量:MAX_PAGES = {页数}
设置全局变量:EXPORT_IMAGES = {是否导出图片}

# 后续所有子流程通过全局变量读取

九、全局变量的调试技巧

技巧1:在关键位置输出全局变量

获取全局变量:SUCCESS_COUNT → 成功数
输出日志:"当前成功数:{成功数}"

技巧2:在catch块中输出全局变量快照

Catch
    获取全局变量:SUCCESS_COUNT → 成功数
    获取全局变量:FAIL_COUNT → 失败数
    输出日志:"出错时状态:成功={成功数},失败={失败数},错误={异常信息}"

技巧3:用“删除全局变量”重置状态

重复运行同一应用时,旧的全局变量可能残留。在流程开头先删除再初始化。

# A_Main 开头
删除全局变量:SUCCESS_COUNT
删除全局变量:FAIL_COUNT
删除全局变量:ERROR_LOG

# 然后再初始化
设置全局变量:SUCCESS_COUNT = 0
设置全局变量:FAIL_COUNT = 0
设置全局变量:ERROR_LOG = []

十、常见误区

误区1:滥用全局变量代替流程参数

# 不推荐:用全局变量传值
设置全局变量:CURRENT_KEYWORD = "手机"
调用子流程:C01_Search  # 内部去读 CURRENT_KEYWORD

# 推荐:用输入参数
调用子流程:C01_Search
    输入参数:关键词="手机"

问题: 全局变量隐式依赖,子流程无法独立测试,多线程乱套。

误区2:忘记初始化就使用

# 错误:直接获取还没设置的全局变量
获取全局变量:USER_NAME → 存入“用户名”  # 可能是None

# 正确:先判断是否存在
判断全局变量是否存在:USER_NAME → 存入“是否存在”
如果 存在 == False
    设置全局变量:USER_NAME = "默认用户"

误区3:在子流程里修改全局变量影响其他地方

全局变量是共享的,修改前要想清楚是否会影响其他正在运行的子流程。如果只是临时计算,用普通变量。


十一、全局变量命名规范

类型命名格式示例
配置常量全大写+下划线MAX_RETRY, EXPORT_PATH
状态变量首字母大写驼峰SuccessCount, IsRunning
列表/字典加后缀ErrorList, ConfigDict
开关标志Is/Has开头IsDebugMode, HasLogin

十二、易错速查表

错误现象原因解决方法
获取到None变量未设置用前判断或初始化
修改后没有变化改完后没重新设置必须用“设置全局变量”覆盖
多个子流程读到的值不一致中间被其他子流程修改了检查是否有意外的修改
应用重新运行残留旧值全局变量未清理开头用“删除全局变量”
调试时看不到全局变量变量面板默认不显示在“变量”面板勾选“显示全局”

十三、推荐资源

  • 影刀官方帮助中心:搜索“全局变量”有视频教程
  • 我的经验:全局变量控制在5个以内,超过说明流程设计可以优化
  • 进阶:结合“流程日志系统”把全局变量的变化写入日志,便于追溯

作者:林焱

本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。

0
0
0
0
评论
未登录
暂无评论