【本文内容会长期更新】
前言
本文主旨是为了解决设计器流程编排的使用问题,包括以下方面
• 流程设计思路
• 流程编排规范
• 流程组件使用
• Python代码经验分享
流程设计思路
1、文件夹使用时间命名时注意事项
凡是使用时间来命名文件夹/文件的,初始化必须放在流程的起始位置或者使用默认值,且设置为全局,后面统一使用此时间变量,避免流程运行过程中出现跨年或跨月或跨日时引起的时间不对称引发问题。
2、文件目录衍生规范
子目录变量需要从根目录变量上衍生
例如把流程运行过程中产生的文件从D盘切换导C盘,只需要更改一个变量的值即可
3、RPA流程执行时受影响的元素
• 自动更新的弹框提示
• 系统通知
• 电脑锁屏
• 向日葵右小角小标会影响下载框的关闭(点击下载框的关闭可使用消息模式,不受遮挡影响)
• 分辨率过小(分辨率过小会导致元素不可见,继而引发操作失败,需要对操作的元素勾选ScrollIntoView)
• 浏览器可信任站点和脚本执行权限
• 输入法(最好是默认英文)
• 拾取元素属性里包含sessionid,cookie,时间戳等可变数据会引起第二次运行失败(解决方法是去掉相关的属性或者用占位符*代替)
• 默认浏览器设置,出现了弹框会影响到下载弹框的元素
• 无人值守机器人运行状态挡住了点击位置,需要关闭运行状态显示
• 浏览器弹出自动保存账号密码的框会影响到界面元素的操作(涉及到表单第一次登录,可人工在弹框后先保存账号密码)
• 浏览器的某些弹框会引起元素的层级变化,例如div/span的层级+1,可根据弹框动态计算元素的层级,再赋值到path属性里。
4、通用功能封装
• 单流程里通用:通用的函数可封装到全局函数里,调用时使用GlobalFun.函数名(需Import GlobalFun),适量的全局函数封装可以减少代码量,例如空判断,类型转换,文件操作,获取单元格内容等
• 多个流程通用1:可写成独立的类(py文件),然后放到ubpa目录底下,例如调用EAS的api,调用UsbServer的连接接口,调用钉钉的消息接口等(from ubpa.文件名 import 类名)
• 多个流程通用2:可发布自定义组件到控制台,其他流程直接引用(例如IE下载文件,Edge下载文件,Chrome下载文件,发送邮件等通用操作),使用自定义组件可以提升流程的复用性和稳定性
• 多个流程通用3:可发布流程到控制台,其他流程通过调用发起任务接口实现调用(需要调用的功能对电脑有依赖,可以使用这种方式让流程在此指定机器人下运行)
5、注意流程变量的作用域
由于苍穹RPA设计器里没有变量作用域的概念,所以在使用变量时要注意,特别是在循环里使用Bool类型,要注意IF Else逻辑里的变量赋值,缺少变量赋值的话,可能此变量状态会流转到下一个循环,引发逻辑错误
6、谷歌浏览器出现崩溃窗体处理方法
使用结束进程组件关闭谷歌浏览器时就会出现恢复框,这个框会影响到谷歌浏览器其他弹框的操作,例如另存为窗体
解决方案:
• 打开目录:C:\Users\用户名\AppData\Local\Google\Chrome\User Data\Default
• 找到文件Preferences
• 使用记事本打开,搜索exit_type
默认的值为Crashed,将其改成Normal
将此文件改成只读,不然谷歌的恢复机制会重置此文件
流程编排规范
1、主流程规范
主流程不建议存放太多操作步骤,主要还是对子流程的调用;
主流程要能展示出整个业务的设计逻辑;
2、子流程规范
不要将多个连续的自动化流程操作拆成多个子流程,可使用序列分开
不要将所有的流程都放在一个子流程里(可重用的需要拆分出来,例如文件下载,发送邮件)
3、流程变量与代码变量的名称
流程变量以lv开头
流程参数以pv开头
全局变量以gv开头(在代码里使用需要加上self.)
代码块里声明的变量不要以lv、pv、gv开头,以防混淆
流程组件使用
1、Loading的处理
对于查询或者提交操作,时间都会比较久,并且会在过程中弹出一个Loading的提示,此时需要做一个Loading开始和结束的状态判断(一般借助循环和条件判断是否break),不要直接用时间延时来处理(不准确)
一个完整的加载中处理包括两部分:开始加载,加载完成
开始加载:可以使用图片检测或者元素是否存在来判断,如果存在图片或者元素则退出循环
加载完成:当图片或者元素不存在时退出循环
可参考下图
2、鼠标点击失败的处理
思路分析:鼠标点击拆解为几个部分:元素定位+鼠标移动+鼠标左键按下,而网页的渲染过程中,元素会有一个位置变动的过程,如果在这个过程中鼠标点击获取到了元素位置,就会出现鼠标点击到了一个错误的位置上,导致鼠标点击没生效。
解决方案:
添加一个循环进行多次点击,每次点击完找一个元素判断是否已存在(需要找一个点击成功的标识元素),存在则是点击成功(Break),不存在则是点击失败,进入下一次循环(Continue),为了避免流程死循环,可添加一个重试的次数或者时间超时
3、等待进程出现
使用等待元素出现组件时,必须保证在有浏览器页面的情况下,否则会直接Return False而无视超时时间。
例如:当我们插入Ukey到电脑上时会弹出一个浏览器,加载网银的登录界面,此时应该做一个等待浏览器出现的逻辑(While循环+进程查询),才可以执行后续的网页操作。
Python代码经验分享
1、SMTP发送邮件
组件图:
代码:
2、request出现SSLError的解决办法
SSLError: HTTPSConnectionPool(host='10.192.255.225', port=1888): Max retries exceeded with url: /archivebase/scan/login/token (Caused by SSLError(SSLError(1, '[SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:777)'),))
请求的时候加上verify=False即可。
3、Openpyxl和Pandas怎么选
需要写入Excel并保留格式的采用Openpyxl
不需要写入Excel仅做查询的使用Pandas,速度快