影刀RPA新手教程:流程控制综合实战——用一个完整案例串起判断、循环、异常处理
前面几篇文章,我们分别学了If判断、For循环、While循环、ForEach循环、嵌套循环、TryCatch。
它们就像乐高积木,单独用也能解决问题。
但真正的威力,是把它们组合起来,搭成一个完整的流程。
这篇文章,我们就用一个完整的案例,把这些"积木"都串起来。
案例:自动登录一个网站
我们要做的事情是:
自动打开一个网站,输入用户名和密码,点击登录。
但如果出现了验证码,我们就刷新页面,重新来过。
最多试5次,如果5次都失败,就停止并报警。
生活中的类似场景
这就像你去医院挂号。
你要先刷身份证(输入用户名密码)。
如果系统正常,你就挂上号了(登录成功)。
但如果系统弹出一个验证码(你要看图识字),你第一次可能输错。
你就刷新页面,重新来。
但医院规定:最多让你试5次,5次都错,就把你身份证锁住(停止并报警)。
第一步:打开网页(TryCatch处理网络错误)
我们先把"打开网页"这个可能会出错的操作,放在TryCatch里面。
这样,如果网络不好,网页打不开,我们还有备用方案(等3秒再试)。
具体步骤:
- 拖一个TryCatch指令到流程里。
- 在Try部分,添加"打开网页"指令,网址填你要登录的网站。
- 在Catch部分,添加"打印日志"(内容:
"打开网页失败"),然后添加"等待"3秒。
第二步:用For次数循环,限制最多试5次
登录可能会失败,我们要试多次。
但也不能无限试,所以要限制次数(最多5次)。
具体步骤:
- 在TryCatch的后面(或者里面,视你的逻辑而定),拖一个For次数循环指令。
- 参数设置:
- 起始值:1
- 结束值:5
- 步长:1
- 循环变量名:
attempt(意思是"当前是第几次尝试")
第三步:在循环体里,输入用户名和密码
具体步骤:
- 在For循环的循环体里,添加"填写输入框"指令(用户名)。
- 再添加"填写输入框"指令(密码)。
- 添加"点击元素"指令(登录按钮)。
拼多多店群自动化上架方案
第四步:用If判断,检查有没有出现验证码
登录之后,网页可能会弹出验证码。
我们要检查一下:验证码出现了没有?
具体步骤:
- 在"点击登录按钮"之后,添加一个"元素是否存在"的判断(或者用If指令,判断某个元素是否存在)。
- 如果这个元素存在(说明出现了验证码),就进入If的"那么"分支。
- 在"那么"分支里,添加"刷新网页"指令,然后加一个"继续循环"指令(跳过这次,进入下一次循环)。
第五步:用If判断,检查是否登录成功
如果没有验证码,或者验证码通过了,我们要检查一下:是不是登录成功了?
具体步骤:
- 在前面If判断的"否则"分支里(或者另写一个If判断),检查"登录成功"的标志元素是否存在。
- 如果存在,说明登录成功了。
- 添加一个"打印日志"(内容:
"登录成功!"),然后添加"跳出循环"指令(不用再试了)。
第六步:如果5次都失败了
如果For循环跑完了5次,都没有跳出(说明没有一次成功),我们就要报警。
具体步骤:
- 在For循环的后面,添加一个"打印日志"指令。
- 内容:
"5次尝试都失败了,请人工检查。" - 也可以添加一个"发送邮件"指令,通知管理员。
我当时踩过这个坑
我第一次写这种综合流程的时候,逻辑写反了。
我想的是:如果登录成功了,就跳出循环。
但我把"跳出循环"指令,放在了检查验证码的If判断里面。
结果:只要出现验证码,就跳出循环了,根本没有去处理验证码。
后来我才知道,流程的控制逻辑一定要想清楚:什么情况下该继续,什么情况下该跳出,什么情况下该重试。
我建议你在写之前,先拿一张纸,把流程图画出来。
哪条路是成功,哪条路是失败,哪条路要重试,先想清楚,再动手写。
还有一次,我在For循环里用了"跳出循环",但跳得不是地方。
我想跳出For循环,结果只跳出了内层的一个While循环(如果你有嵌套循环的话,要特别注意"跳出循环"到底跳出的是哪一层)。
在影刀里,"跳出循环"指令会跳出当前这一层循环。
如果你有多层嵌套,你想跳出最外层,你需要在最外层循环里面设置一个"标志变量",然后一层一层地判断这个变量,决定要不要继续。
这个坑我踩过,你别踩了。
12大核心模块之——变量操作
在这个综合案例里,我们会用到好几个变量:
attempt:记录当前是第几次尝试(For循环的循环变量)。login_success:记录是不是登录成功了(布尔值,True或False)。captcha_appear:记录是不是出现了验证码(布尔值)。
在复杂的流程里,多用变量来记录状态,会让你逻辑更清晰。
12大核心模块之——指令参数配置
综合流程里,指令会很多。
每一条指令的参数,都要仔细填。
我建议你每填完一条指令,就运行一下,看看这一条指令是不是能正常工作。
不要等到写了几十条指令之后,才一起运行,那样一旦出错,你很难找到是哪条指令的问题。
12大核心模块之——网页元素捕获
在这个案例里,你需要捕获的元素有:
- 用户名输入框
- 密码输入框
- 登录按钮
- 验证码图片(或者验证码输入框,用来判断是否出现了验证码)
- 登录成功后的标志元素(比如"退出登录"按钮,或者"欢迎你,XXX"这段文字)
捕获的时候,要给每个元素起一个清楚的名字,这样后面写流程的时候,你才知道你选的是哪个元素。
12大核心模块之——XPath和CSS选择器
如果网页的元素会变(比如每次登录,验证码的id都会变),你可能需要手动改XPath。
比如:验证码图片的id是captcha_12345,下次变成captcha_67890。
你不能用//img[@id='captcha_12345']这种固定id的XPath。
要用//img[contains(@id,'captcha_')]这种模糊匹配的XPath。
12大核心模块之——Python脚本
如果有些判断逻辑很复杂,影刀自带的If判断条件不够用。
你可以在流程里插入"执行Python"指令,用Python代码来做判断。
比如:判断验证码图片的链接是不是包含某个关键字。
Python代码可以更灵活地处理字符串、列表、字典等数据。
12大核心模块之——Excel操作
如果用户名和密码不是写死在流程里的,而是存在一个Excel文件里。
你可以先用"读取Excel"指令,把用户名和密码读出来,存到变量里。
然后在流程里用这些变量。
12大核心模块之——数据库操作
如果用户名和密码存在数据库里。
你可以先用"执行SQL查询"指令,查出来,存到变量里。
12大核心模块之——文件操作
如果登录成功之后,你要把一个文件上传到这个网站。
你可以在登录成功之后,用"上传文件"指令。
TEMU店群如何管理运营?
12大核心模块之——邮件操作
如果登录失败5次,你想发邮件通知管理员。
你可以在For循环后面,加一个"发送邮件"指令。
12大核心模块之——调试技巧
综合流程比单一指令复杂得多。
调试的时候,要多用"打印日志"指令。
在关键的地方,都打印一句日志,比如:
"开始第1次尝试""用户名和密码已填写""登录按钮已点击""出现验证码,刷新页面"
这样,如果流程出错了,你看日志就能知道,跑到哪一步出的错。
一个完整的例子(流程逻辑描述)
我来描述一下这个完整流程的逻辑,你可以照着搭。
流程逻辑:
- 尝试打开网页(TryCatch:如果打开失败,等3秒再试)。
- 设置
attempt = 1,login_success = False。 - For循环,从1到5(
attempt):- 填写用户名、密码。
- 点击登录。
- If判断:验证码是否出现?
- 是:刷新页面,继续下一次循环。
- 否:继续下一步。
- If判断:是否登录成功?
- 是:打印"登录成功",
login_success = True,跳出循环。 - 否:继续下一次循环。
- 是:打印"登录成功",
- If判断:
login_success是否为False?- 是:打印"5次都失败了",发送邮件通知。
- 否:什么都不做(已经成功了)。
XPath示例(判断验证码是否出现):
//div[@id='captcha-modal']如果这个XPath能找到元素,说明验证码出现了。
CSS选择器示例:
div#captcha-modalPython代码示例(判断登录是否成功):
# 假设 check_login_success() 会返回True或Falselogin_success=check_login_success()iflogin_success:print("登录成功")else:print("登录失败")配置参数示例(If判断指令,检查元素是否存在):
条件类型:元素是否存在 元素:登录成功标志元素小结
这篇文章,我们用一个"自动登录网站"的案例,把If判断、For循环、TryCatch都串起来了。
生活中的挂号、刷身份证,也有类似的流程控制。
影刀里的综合流程,就是把各种"积木"组合起来,解决复杂的问题。
记住:写综合流程之前,先画流程图,把逻辑想清楚。
多打印日志,方便找错。
一步一步来,不要一次写太多指令。
home.linyan.cloud
内容标签:影刀RPA 新手教程 流程控制 综合实战 零基础
作者:林焱