流程能跑完不报错,但采集到的数据总是少几条、或者每次都重复采集第一页——这种“没报错但结果不对”的问题最难排查。
因为你不知道流程到底是怎么走的,哪个判断分支被触发了,哪个变量值变了。
解决方法:打断点 + 单步执行,让流程一步一步走,你盯着看每一步的变化。
我非技术出身,刚开始觉得“调试”很高深,后来发现就是在关键位置按个暂停,观察变量值。
一、调试三步走:断点 → 单步 → 观察
| 步骤 | 操作 | 作用 |
|---|---|---|
| 1. 打断点 | 在流程行号左侧点击,出现红点 | 流程运行到这里会暂停 |
| 2. 单步执行 | 按F10或点“单步跳过”按钮 | 一次执行一条指令,不跳过子流程 |
| 3. 观察变量 | 鼠标悬停变量名,或看右侧变量面板 | 查看当前变量的值对不对 |
影刀调试入口: 顶部工具栏“调试”按钮(虫子图标)→ 选择“调试当前流程”或“从此处开始调试”。
二、打断点的3个常用位置
1. 循环开始前
查看循环变量(如页码、列表)的初始值是否正确。
# 在第20行打断点
页码 = 1 ← 在这里打断点

循环 当 页码 <= 总页数
...
检查: 页码是1吗?总页数有没有正确获取到?
2. 判断分支内部
怀疑某个条件分支一直没进去,或者一直进去了不该进的。
如果 变量 == True ← 打断点在这里

调用子流程(分支A)
否则
调用子流程(分支B)
检查: 鼠标悬停在变量上,看它是True还是False,跟你预期是否一致。
3. 关键变量的赋值之后
比如刚提取完价格,想看看价格变量是不是脏数据。
价格 = 获取元素文本(价格元素) ← 打断点在这下一行
检查: 价格变量里是“¥99.00元”还是“99”,有没有多余空格。
三、如何在影刀中打断点(图文步骤)
- 打开流程(主流程或子流程都可以)
2. 找到要暂停的行,点击该行最左侧的灰色区域(行号旁边)
- 出现红色圆点,表示断点已打上
- 点击顶部**“调试”按钮,选择“调试当前流程”**
- 流程运行到红点处会自动暂停,红点变成黄色箭头
- 按F10(单步跳过)或F11(单步进入子流程)逐行执行
- 右侧变量面板会实时显示所有变量的当前值
快捷键:
- F10:单步跳过(不进入子流程内部)
- F11:单步进入(进入子流程内部,逐行执行)
- F5:继续运行(直到下一个断点或流程结束)
- Shift+F5:停止调试
四、单步执行时的4个观察点
观察点1:变量值变化
右侧变量面板里,变量后面会显示当前值。
如果某个变量应该是数字却显示“None”或空字符串,说明前面没赋上值。
观察点2:条件判断走了哪条路
执行到“如果”指令时,黄色箭头会指向满足条件的那条分支。
如果箭头走到了你不期望的分支,说明条件表达式写反了。
观察点3:循环次数是否正确
单步执行到循环时,注意观察循环变量(如页码)每次增加后是不是预期值。
常见错误:页码在循环内忘记了+1,导致死循环或重复采集同一页。
观察点4:元素是否被正确捕获
当执行到“获取元素文本”或“鼠标点击”时,如果影刀高亮的橙色边框不是你想要的元素,说明XPath捕获错了。
五、实战调试案例:翻页采集只重复第一页
问题现象
流程跑完Excel里有100行数据,但发现这100行全是第一页的商品,重复了10次。
断点设置
- 在“点击下一页”指令前打断点
- 在“页码 = 页码 + 1”指令前打断点
单步执行观察
第一次停在点击下一页前:
查看变量页码 = 1(正确)
执行点击下一页,然后等待页面加载,再单步到页码+1前:
查看变量页码 = 1(还是1?)——问题发现了:页码变量没有被更新!
原因: 页码+1那行写的是页码 + 1,但没有把结果赋值回页码,应该写成页码 = 页码 + 1。
修复
把赋值写对,重新调试,页码变成2、3...问题解决。
六、调试子流程:用“单步进入”钻进去看
如果主流程调用了子流程,按F10会直接把整个子流程执行完,看不到内部细节。
想看子流程内部,要在调用子流程那一行按F11(单步进入)。
操作:
- 在主流程的“调用子流程”行暂停
- 按F11
- 自动跳转到子流程内部,停在第一条指令
- 再按F10逐行执行子流程
- 子流程执行完后,自动返回主流程继续
注意: 子流程里也可以打断点,在调试模式下会生效。
七、条件断点:只在特定情况下暂停
有时候循环500次,只在第100次出错,不想每次按F10按到手酸。
影刀支持条件断点——设置一个条件,满足时才暂停。
设置方法
- 右键断点红点 → 选择“条件”
- 输入条件表达式,比如
页码 == 100 - 运行调试,流程会在页码=100时自动暂停
常用条件:
变量名 == "特定值"索引 > 50len(列表变量) == 0(列表为空时暂停)
八、调试时的3个辅助工具
1. 输出日志(不暂停)
不想暂停只想看变量值,可以在流程里加“输出日志”指令。
输出日志("当前页码:" + 页码)
输出日志("采集到商品数量:" + 长度(商品列表))
日志会显示在底部的“输出”窗口,流程不会停。
2. 变量监视(Watch)
右侧变量面板上方,可以添加“监视表达式”,比如页码 + 总页数。
不需要在流程里建这个变量,也能实时计算查看。
3. 调用堆栈
调试暂停时,右侧可以看到“调用堆栈”——当前停在了哪个子流程的哪一行。
如果停在了很深的地方,点堆栈里的上层可以回溯调用路径。
九、常见调试场景与排查方向
| 问题现象 | 打哪里断点 | 查看什么 |
|---|---|---|
| 循环次数不对(多一次或少一次) | 循环开始前、循环变量增减后 | 循环变量的初始值和结束条件 |
| 判断分支走错了 | 判断指令前、分支内部 | 条件变量的值,以及条件表达式 |
| 元素点不到(不报错但无效果) | 点击指令前 | 元素的高亮框是否在正确位置 |
| 采集到的数据重复 | 数据添加到列表/表格前 | 添加前的数据内容,以及是否每次添加前清空了临时变量 |
| 子流程没被执行 | 调用子流程指令处 | 是否进入了子流程(看调用堆栈) |
十、调试后的清理
调试完成后,记得删除所有断点,否则下次正常运行时还会停在断点处。
快捷方式:顶部“调试”菜单 → “删除所有断点”。
或者: 点击调试按钮旁边的“停止调试”后,流程会自动忽略断点,但断点还在。
建议养成习惯,调试完删掉临时断点,只保留有必要的长期断点(比如在判断逻辑上)。
常见问题速查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 打断点后不暂停 | 运行模式是“运行”不是“调试” | 点“调试”按钮,不是“运行” |
| 按F10没反应 | 焦点不在影刀窗口 | 点击一下流程画布,确保影刀是活动窗口 |
| 变量面板显示“无法获取值” | 变量在当前作用域不存在 | 检查变量是否在当前子流程里定义,还是主流程的全局变量 |
| 子流程里打了断点,调试主流程时没停 | 主流程调用子流程时用的是“运行”模式 | 确保主流程也是调试模式启动 |
| 断点红点变成了灰色圆圈 | 断点被禁用了 | 右键断点 → 启用 |
| 条件断点输入表达式后不生效 | 变量名写错了,或类型不匹配 | 在变量面板确认变量名和类型 |
推荐资源
- 影刀官方学院: “流程调试——断点与单步执行”(视频演示)
- 我的文章联动:
- 上一篇:[魔法指令3.0完整指南(选题池21号)]
- 下一篇预告:[影刀RPA常见报错速查:找不到元素/类型错误/超时/权限不足/网页对象无效](选题池23号)
- 小技巧: 在容易出错的地方先加“输出日志”代替断点,快速定位后再精确打断点调试
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
