
影刀RPA新手教程循环与流程控制实战指南——四种循环什么时候用哪个循环与流程控制是RPA的核心逻辑。逻辑写对了流程才能跑得顺。我第一次写循环的时候把指令摆错位置导致只采集到第一条数据排查了一下午。这篇不讲废话直接给用法、给场景、给坑点。一、四种循环详解1.1 循环一For次数循环知道要循环几次使用场景明确知道要循环几次。真实案例要在搜索框里输入10个关键词每个关键词搜索一次。操作步骤用【For次数循环】指令起始值填0结束值填9循环10次从0到9当前循环项填i可选记录当前是第几次循环在循环体内写要重复执行的操作在循环体内用【设置变量】指令变量名填keyword值填关键词列表[i]取第i个关键词用【点击元素(web)】指令点击搜索框用【输入文本(web)】指令输入keyword用【点击元素(web)】指令点击搜索按钮用【等待】指令等待3秒等页面加载完成坑点1起始值和结束值搞混。我第一次做的时候起始值填1结束值填10以为会循环10次。结果循环项是1到10但我的关键词列表下标是0到9导致下标越界。正确理解起始值0结束值9循环10次循环项是0,1,2,…,9起始值1结束值10循环10次循环项是1,2,3,…,10如果要循环的列表下标是0到9起始值填0结束值填9。坑点2循环体内用了循环项i但i超过了列表的最大下标。错误写法关键词列表[关键词1,关键词2,关键词3]# 只有3个# For次数循环起始值0结束值9# 循环到第4次时i3关键词列表[3]就越界了正确写法关键词列表[关键词1,关键词2,关键词3]# For次数循环起始值0结束值2因为len(关键词列表)3下标是0,1,2更简单的方法用【获取列表长度】指令动态获取列表长度作为结束值。1.2 循环二ForEach列表循环遍历列表每个元素使用场景有一个列表要对列表里的每个元素做同样的操作。真实案例有一个Excel里面是商品ID列表要逐个打开商品详情页。操作步骤用【读取Excel】指令读取商品ID列表保存到变量商品ID列表用【ForEach列表循环】指令列表填商品ID列表当前循环项填商品ID在循环体内写要重复执行的操作在循环体内用【打开网页】指令网址填https://商品详情页网址/ 商品ID拼接网址用【等待】指令等待3秒等页面加载完成用【获取元素文本内容(web)】指令获取商品名称用【写入Excel】指令把商品名称写入另一个Excel坑点1循环项是对象不是下标。错误理解以为商品ID是下标0, 1, 2, …正确理解商品ID是列表里的元素本身不是下标。比如商品ID列表[1001,1002,1003]# ForEach列表循环# 第一次循环商品ID 1001是元素本身不是下标0# 第二次循环商品ID 1002是元素本身不是下标1# 第三次循环商品ID 1003是元素本身不是下标2坑点2要在循环体内用下标用【获取ForEach列表循环项的位置】指令。操作步骤在【ForEach列表循环】指令中勾选输出循环项的位置位置变量填position从0开始计数在循环体内用【打印日志】指令内容填position可以看到当前是第几次循环1.3 循环三相似元素循环网页上一组相似元素逐个处理使用场景网页上有多个相似的元素比如商品列表、文章列表要对每个元素做同样的操作。真实案例采集电商商品列表页的所有商品标题。操作步骤用【打开网页】指令打开商品列表页用【获取相似元素列表(web)】指令定位方式选择元素捕获或XPath、CSS元素操作选择获取元素文本内容保存到变量商品标题列表用【ForEach列表循环】指令循环商品标题列表等等这里有个问题为什么先用【获取相似元素列表(web)】再用【ForEach列表循环】因为【获取相似元素列表(web)】只是获取了元素列表并没有循环。要循环必须用【ForEach列表循环】。那【循环相似元素(web)】指令是干嘛的【循环相似元素(web)】指令 【获取相似元素列表(web)】【ForEach列表循环】它把两步合成一步更方便。操作步骤用【循环相似元素(web)】指令用【打开网页】指令打开商品列表页用【循环相似元素(web)】指令定位方式选择元素捕获当前循环项填web_loop_element在循环体内写要重复执行的操作在循环体内用【获取元素文本内容(web)】指令元素对象填web_loop_element保存到变量商品标题用【写入Excel】指令把商品标题写入Excel坑点重点新手最容易搞混相似元素循环 vs ForEach列表循环什么时候用哪个答案相似元素循环专门用于网页上的相似元素元素是网页对象ForEach列表循环用于已经获取到的列表列表是普通数据比如字符串列表、数字列表错误用法# 错误把相似元素列表传给ForEach列表循环用【获取相似元素列表(web)】指令保存到变量元素列表 用【ForEach列表循环】指令列表填元素列表# 错误元素列表是网页对象列表ForEach列表循环处理不了正确用法# 正确直接用【循环相似元素(web)】指令用【循环相似元素(web)】指令当前循环项填web_loop_element 在循环体内用web_loop_element操作元素另一个正确用法# 如果你已经用【获取相似元素列表(web)】获取了元素列表# 可以用【ForEach列表循环】循环但循环项的操作要针对网页对象用【获取相似元素列表(web)】指令保存到变量元素列表 用【ForEach列表循环】指令列表填元素列表 在循环体内用【点击元素(web)】指令元素对象填当前循环项总结网页上的相似元素 → 用【循环相似元素(web)】已经获取到的数据列表字符串、数字等 → 用【ForEach列表循环】1.4 循环四While条件循环不确定什么时候停使用场景不知道要循环多少次只知道当某个条件成立时继续循环。真实案例采集多页商品数据不知道总共有多少页只知道当’下一页’按钮不可点击时停止循环。操作步骤用【While条件循环】指令条件填下一页按钮.exists() True判断下一页按钮是否存在在循环体内写要重复执行的操作在循环体内用【循环相似元素(web)】指令采集当前页的商品数据用【点击元素(web)】指令点击下一页按钮用【等待】指令等待3秒等页面加载完成坑点1条件永远为True导致死循环。错误写法# 错误条件永远为True死循环用【While条件循环】指令条件填11永远为True正确写法# 正确条件会在某个时刻变为False用【While条件循环】指令条件填下一页按钮.exists()True# 当翻到最后一页时下一页按钮会消失exists()返回False循环结束坑点2循环体内没有修改条件的操作导致死循环。错误写法# 错误循环体内没有修改condition的值condition永远是TrueconditionTrue用【While条件循环】指令条件填conditionTrue 在循环体内 打印日志循环中...# 没有修改condition的值condition永远是True死循环正确写法# 正确循环体内修改condition的值conditionTrue用【While条件循环】指令条件填conditionTrue 在循环体内 打印日志循环中...# 某个条件满足时修改condition为Falseif某个条件满足:conditionFalse坑点3While条件循环和For次数循环混用导致逻辑混乱。建议知道循环次数 → 用For次数循环不知道循环次数但知道循环条件 → 用While条件循环二、If条件判断使用场景根据不同的条件执行不同的操作。真实案例判断商品是否有库存有库存就下单没库存就跳过。操作步骤用【If条件】指令对象1填库存数量比较方式选择对象2填0在条件成立时分支写下单的操作在条件不成立时分支写跳过的操作或什么都不写更复杂的条件判断用【If多条件】指令真实案例判断商品是否有库存且价格在预算范围内。操作步骤用【If多条件】指令添加条件1库存数量 0添加条件2商品价格 预算逻辑关系选择与两个条件都成立时才执行在条件成立时分支写下单的操作在条件不成立时分支写跳过的操作坑点对象1和对象2的类型要匹配。错误写法# 错误字符串和数字比较用【If条件】指令 对象1填100字符串 比较方式选择对象2填50数字# 报错类型不匹配正确写法# 正确统一类型用【If条件】指令 对象1填100数字用int()函数转换 比较方式选择对象2填50数字三、Try-Catch异常处理使用场景某个操作可能会报错但你不希望流程停下来而是希望捕获错误做相应的处理。核心原则竞品讲了要保留可控异常用If比如判断文件是否存在存在再打开不可控异常用Try-Catch比如网络连接可能失败用Try-Catch捕获真实案例用【打开网页】指令打开一个网址但网址可能打不开网络问题、网址失效等。操作步骤用【Try-Catch】指令在尝试分支写可能会报错的指令在捕获分支写报错后要执行的操作在尝试分支用【打开网页】指令网址填https://example.com在捕获分支用【打印日志】指令内容填打开网页失败 errorerror是系统自动定义的表示捕获到的错误信息用【发送邮件】指令给自己发邮件提醒网址打不开坑点1Try-Catch捕获不到逻辑错误。比如# Try-Catch捕获不到这种逻辑错误用【Try-Catch】指令 在尝试分支 a10ba20# 类型错误但这是代码逻辑错误Try-Catch捕获不到Try-Catch能捕获的异常网页元素找不到网页加载超时文件不存在网络连接失败等等运行时异常Try-Catch捕获不到的异常代码语法错误比如少了冒号代码逻辑错误比如类型不匹配这些错误要在开发阶段用If条件判断来避免坑点2Try-Catch嵌套使用导致逻辑复杂。不建议# 不建议Try-Catch嵌套用【Try-Catch】指令 在尝试分支 用【Try-Catch】指令# 嵌套在尝试分支...在捕获分支...在捕获分支...建议把可能会报错的指令放在同一个Try-Catch里不要在Try或Catch分支里再嵌套Try-Catch。四、嵌套循环的坑指令摆放位置真实案例采集多页商品数据每页有10个商品每个商品要提取3个字段标题、价格、销量。正确的指令摆放位置用【While条件循环】指令外层循环翻页 条件下一页按钮存在 在循环体内 用【循环相似元素(web)】指令中层循环遍历当前页的商品 当前循环项web_loop_element 在循环体内 用【ForEach列表循环】指令内层循环提取每个商品的多个字段 列表[标题, 价格, 销量] 当前循环项field 在循环体内 根据field的值用不同的XPath提取数据 用【写入Excel】指令写入数据坑点内层循环要用到外层循环的变量但变量作用域搞错。错误写法# 错误在内层循环里用外层循环的变量但变量没定义用【While条件循环】指令 在循环体内 page_numpage_num1# 外层循环定义page_num用【ForEach列表循环】指令 在循环体内 打印日志 page_num# 错误page_num在内层循环里访问不到正确写法# 正确用【设置变量】指令把外层循环的变量传给内层循环用【While条件循环】指令 在循环体内 page_numpage_num1# 外层循环定义page_num用【设置变量】指令变量名填current_page值填page_num 用【ForEach列表循环】指令 在循环体内 打印日志 current_page# 正确用current_page不用page_num更简单的方法影刀的变量是全局的内层循环可以直接访问外层循环的变量。正确写法简化用【While条件循环】指令 在循环体内 page_numpage_num1# 定义page_num用【ForEach列表循环】指令 在循环体内 打印日志 page_num# 正确可以直接访问page_num五、案例实战采集多页商品数据下面用一个完整案例把四种循环和流程控制串起来。需求打开电商商品搜索结果页采集当前页所有商品的标题、价格、销量点击下一页按钮翻到下一页重复步骤2-3直到下一页按钮不可点击实现方案翻页用While条件循环每页商品用相似元素循环每个商品多个字段用ForEach列表循环操作步骤第一步打开商品搜索结果页用【打开网页】指令网址填https://电商网站.com/search?keyword手机第二步While条件循环翻页用【While条件循环】指令条件填下一页按钮.exists() True第三步相似元素循环遍历当前页的商品在While循环体内用【循环相似元素(web)】指令定位方式选择元素捕获捕获商品容器当前循环项填web_loop_element第四步ForEach列表循环提取每个商品的多个字段在相似元素循环体内用【ForEach列表循环】指令列表填[标题, 价格, 销量]当前循环项填field第五步根据field的值提取不同的数据在ForEach循环体内用【If多条件】指令条件1field 标题如果条件成立用【获取元素文本内容(web)】指令XPath填./div[classtitle]保存到变量title条件2field 价格如果条件成立用【获取元素文本内容(web)】指令XPath填./div[classprice]保存到变量price条件3field 销量如果条件成立用【获取元素文本内容(web)】指令XPath填./div[classsales]保存到变量sales第六步写入Excel在ForEach循环体外但在相似元素循环体内用【写入Excel】指令写入title、price、sales第七步点击下一页按钮在While循环体内在相似元素循环体后面用【点击元素(web)】指令点击下一页按钮用【等待】指令等待3秒等页面加载完成六、常见报错及解决方案6.1 报错列表下标越界原因For次数循环的结束值超过了列表的最大下标。解决方案用【获取列表长度】指令动态获取列表长度作为结束值。6.2 报错元素找不到原因相似元素循环时页面刷新了元素失效了。解决方案改用For次数循环在循环内重新获取相似元素列表。6.3 报错死循环原因While条件循环的条件永远为True。解决方案确保循环体内有修改条件的操作或者在某个条件下用【退出循环】指令强制退出。七、总结四种循环的选择For次数循环知道要循环几次ForEach列表循环遍历列表每个元素数据是普通类型相似元素循环遍历网页上的相似元素元素是网页对象While条件循环不知道要循环多少次只知道循环条件重点坑点相似元素循环 vs ForEach列表循环前者用于网页对象后者用于普通数据While条件循环要避免死循环嵌套循环的变量作用域要搞清楚可控异常用If不可控异常用Try-Catch新手最重要的是多练。找个项目实战把四种循环都试一遍自然就掌握了。更多案例在影刀RPA学习主页 home.linyan.cloud#影刀RPA #循环 #流程控制 #While循环 #ForEach循环 #新手入门作者林焱