影刀RPA新手教程_条件判断与分支逻辑从入门到工程级实战
影刀RPA新手教程:条件判断与分支逻辑从入门到工程级实战
很多新手写自动化,流程是一根直线到底——打开网页→输入→点击→等待→采集。
这种写法能跑,但一旦遇到"如果页面出现弹窗怎么办"、“如果数据不存在怎么办”、“如果网络超时怎么办”,就直接崩溃。
自动化和手动操作最大的区别不是"它会点按钮",而是"它会判断"。
条件分支就是自动化的"判断力"。这篇文章从基础语法讲到工程级写法。
一、条件判断的三种基础形态
形态一:如果-否则
# 最基础的分支判断元素是否存在("登录按钮")如果 结果为真:点击元素("登录按钮")输入账号密码()否则:输出日志("已登录,跳过")形态二:多分支
拼多多店群自动化报活动上架!
# 根据不同的状态做不同的处理订单状态=获取元素文本("订单状态标签")如果 订单状态=="待付款":点击元素("去支付按钮")elif订单状态=="待发货":点击元素("催发货按钮")elif订单状态=="已发货":点击元素("确认收货按钮")否则:输出日志(f"未知状态:{订单状态}")形态三:嵌套判断
# 外层判断页面类型,内层判断具体操作判断元素是否存在("移动端页面标识")如果 结果为真:# 移动端切换为移动端采集模式()判断元素是否存在("弹窗")如果 结果为真:关闭弹窗()采集移动端数据()否则:# 桌面端判断元素是否存在("广告横幅")如果 结果为真:关闭广告()采集桌面端数据()二、条件组合的运算符
# 并且(AND)如果 元素A存在==True并且 元素B存在==True:执行操作()# 或者(OR)如果 元素A存在==True或者 元素B存在==True:执行操作()# 不等于如果 订单状态!="已取消":继续处理()# 大于/小于如果 商品价格>100:标记为高价商品()# 包含如果 文本包含(商品名称,"特价"):标记为促销商品()三、实战案例:智能登录检测
这是最常用的分支场景——登录态判断:
# 智能登录——自动判断并选择最优路径打开网页("https://seller.example.com")等待(3秒)# 第一层判断:是否已登录判断元素是否存在("用户头像区域")如果 结果为真:输出日志("已登录,直接进入工作台")进入工作台()否则:# 第二层判断:登录页面类型判断元素是否存在("手机验证码登录Tab")如果 结果为真:# 有验证码登录选项判断元素是否存在("密码登录链接")如果 结果为真:# 切换到密码登录点击元素("密码登录链接")等待(1秒)输入账号密码()点击元素("登录按钮")否则:# 简单登录页输入文本("账号输入框",读取配置("账号"))输入文本("密码输入框",读取配置("密码"))发送按键("{ENTER}")# 第三层判断:登录后的状态等待(5秒)判断元素是否存在("用户头像区域")如果 结果为真:输出日志("登录成功")elif判断元素是否存在("验证码输入框"):输出日志("需要输入验证码,暂停等待...")暂停并通知()else:输出日志("登录状态未知,截图保存")截图保存("登录结果异常")这种三层判断的写法,能覆盖 95% 的登录场景。
四、实战案例:翻页终点的多重判断
# 智能翻页——自动检测最后一页翻页中=True条件循环(翻页中==True):采集当前页数据()# 方法1:检测"下一页"按钮是否存在判断元素是否存在("下一页按钮_可用状态")如果 结果为真:点击元素("下一页按钮")等待(页面等待时间)elif判断元素是否存在("下一页按钮_禁用状态"):# 方法2:按钮变成了灰色/禁用输出日志("检测到禁用按钮,已是最后一页")翻页中=Falseelif判断元素是否存在("没有更多了"):# 方法3:页面底部提示文字输出日志("检测到'没有更多了'提示")翻页中=Falseelse:# 方法4:当前页数据为0获取相似元素列表("商品卡片")->当前页商品 如果 商品数量==0:输出日志("当前页无数据,可能已到最后一页")翻页中=False否则:# 兜底:找不到翻页入口输出日志("无法检测翻页状态,截图后退出")翻页中=False四种判断方式从前往后依次兜底,比单靠一种可靠得多。
五、条件判断的性能建议
避免不必要的判断
# 不好:每次循环都重新判断同一件事遍历商品列表:判断元素是否存在("页面底部的翻页按钮")# 这个结果每轮都一样采集商品数据()# 好:判断一次就够了判断元素是否存在("翻页按钮")->可翻页[video(video-BZBoxnQl-1781421311262)(type-csdn)(url-https://live.csdn.net/v/embed/526817)(image-https://v-blog.csdnimg.cn/asset/1d3c3709da119dd8c13ab01e9b282520/cover/Cover0.jpg)(title-TEMU店群矩阵自动化运营核价报活动)]遍历商品列表:采集商品数据()# 直接用之前的判断结果减少重复的DOM查询
# 把判断结果存成变量按钮是否存在=判断元素是否存在("登录按钮")# 后面多处使用,不要再判断一次如果 按钮是否存在:...# 用第一处如果 按钮是否存在:...# 用第二处六、常见错误与修复
| 错误 | 后果 | 修复 |
|---|---|---|
| 判断元素是否存在后直接点击 | 元素可能在判断完的瞬间消失 | 判断完加0.3秒等待再操作 |
| 嵌套if超过3层 | 逻辑难读、难维护 | 把内层提成独立的子流程 |
| 判断条件顺序错误 | 最常见的条件被放到最后 | 最可能发生的条件放最前面 |
| 只判断了"是"没判断"不是" | 异常情况没处理 | 每条if必须有else |
| 条件里的元素没捕获 | 运行时才发现元素路径变了 | 写条件前先捕获确认元素存在 |
七、工程级的条件判断模式
真实的电商采集流程中,每个操作前都有一套标准判断:
# 工程级操作封装安全点击(元素名,超时秒数):"""带判断的点击:先确认存在再点"""判断元素是否存在(元素名)如果 结果为真:等待(0.3秒)点击元素(元素名)返回True否则:输出日志(f"元素{元素名}不存在,跳过点击")返回False安全输入(元素名,文本内容):"""带判断的输入:先确认输入框再填"""判断元素是否存在(元素名)如果 结果为真:点击元素(元素名)等待(0.2秒)输入文本(元素名,文本内容)返回True否则:输出日志(f"输入框{元素名}不存在")返回False安全提取(父元素,子选择器,默认值):"""带兜底的提取:提取失败返回默认值"""Try:结果=获取元素文本(父元素+子选择器)返回 结果 Catch 异常:返回 默认值把这套封装做成子流程,后续所有操作都调用安全点击()、安全输入(),流程稳定性会大大提升。
内容标签:#影刀RPA #条件判断 #分支逻辑 #自动化 #RPA新手教程
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
