- 现实需求
在进行RPA流程设计过程中,遇到登录系统需要滑动验证的情况,如图所示:
此时需要在RPA流程设计中,借助现有的活动完成模拟人工操作,完成验证登录操作。
- 设计思路
这个功能流程的设计思路大体如下:
1、首先是利用uipath自带的截取屏幕图片活动,将需要验证的图片截取下来;
2、调用第三方平台的接口识别图片并返回缺口的x坐标;
3、利用uipath自带的“单击”活动,模拟拖动滑块,实现验证登录的操作。
- 实现过程
- 在uipath中使用截取屏幕截图,捕捉需要进行验证的验证码图片,自定义存储文件的路径,我这里是定义了一个变量img_path来存放文件路径。
2.添加“pyhton作用域”活动,在作用域中依次添加“加载python脚本”、“调用python方法”、“获取python对象”三个活动。
以上活动的前提是你要在项目依赖项中先添加uipath.python.activities,不然在活动中你是找不到上面的这些活动的。
添加依赖项的方法:在设计界面上方点击管理程序包,在管理包界面中搜索输入python,选择对应的包安装即可。
当然,你要调用python的脚本代码,自然也是要先安装python解析器的,至于安装python解析器的步骤方法,这里就略过,请各位自行百度。
3.填写相应活动的参数变量,这里就只展示一些必填的参数内容。
Python作用域
版本:根据你本地安装的python解释器为准,我这里选择自动;
目标:x86或者x64,根据你实际的情况进行选择;
路径:就是python.exe的文件路径,我这里设置了变量python_path来存放。
加载python脚本
文件:也就是你python脚本文件的存放路径,我这里用py_path变量来存放;
结果:这里需要定义一个pyhton对象来存放输出的结果,定义为py_def。
调用python方法
名称:你需要调用的python脚本里面的方法名称,我这里定义变量def_name来存放;(这里面要注意,这个名称必须与你python脚本中的方法名称一样)
实例:就是第一步加载python脚本时,输出的python对象数据,也就是py_def;
结果:该活动最终输出的结果,类型也是一个python对象,我这里定义一个变量code_value_py来进行存放。
获取pyhton对象
TypeArgument:这里根据你实际返回的结果需要进行选择,我这里需要返回的是字符串(string);
Python对象:这里输入上一步调用python方法输出的结果,我这里为定义的变量code_value_py;
结果:最终输出的结果,可以自行定义,我这里定义变量code_value进行存放。
经过以上步骤,最后我们可以拿到一个验证码图片缺口的x坐标的值。可能有的朋友就有疑惑了,这个x坐标的值是怎么拿到的。别急,最后我会对python脚本展开来讲。
4.添加三个“单击”活动,用以模拟鼠标的操作来完成滑动验证码验证,三个单击活动的参数配置稍有不同,分别如下:
第一个单击活动
光标移动类型:CursorMotionType.Smooth
点击类型:选择下,鼠标键默认左键,表示鼠标按下左键;
单击偏移量:模式选择PointOffset,但是不设置偏移量,表示从起点开始;
输入模式:选择硬件事件。
第二个单击活动
光标移动类型:CursorMotionType.Smooth
点击类型:选择下,鼠标键默认左键,表示鼠标按下左键;
单击偏移量:模式选择PointOffset,这里的偏移量应用前面python返回的x值,表示从滑动到的位置,我这里设置为CInt(code_value);
输入模式:选择硬件事件。
这里可能还要设置活动完结后,延迟2~3秒。
第三个单击活动
光标移动类型:CursorMotionType.Smooth
点击类型:选择上,鼠标键默认左键,表示鼠标放开左键;
单击偏移量:模式选择PointOffset,但是不需要设置偏移量;
输入模式:选择硬件事件。
至此,整一个RPA流程的设计需要的步骤就完成实现了。
- Python脚本代码
参考的python脚本代码如下,这里调用的是云码平台提供的接口,https://zhuce.jfbym.com/demo/。这里还有一个图鉴的平台,上面的接口脚本也可以参考http://ttshitu.com/docs/python.html#pageTitle。
import json
import time
import requests
import base64
class YdmVerify(object):
_custom_url = "http://api.jfbym.com/api/YmServer/customApi"
_token = "your token"
_headers = {
'Content-Type': 'application/json'
}
def sin_slide_verify(self, image, verify_type="20110"):
# 通用单图滑块(截图) 20110
payload = {
"image": base64.b64encode(image).decode(),
"token": self._token,
"type": verify_type
}
Resp=requests.post(self._custom_url,headers=self._headers,data=json.dumps(payload))
#print(resp.text)
print(resp.json()['data']['data'])
return resp.json()['data']['data']
def base64_api():
Y = YdmVerify()
with open('your img_path', 'rb') as f:
s = f.read()
return Y.sin_slide_verify(image=s)
if __name__ == '__main__':
#Y = YdmVerify()
#with open('your img_path', 'rb') as f:
# s = f.read()
# Y.sin_slide_verify(image=s)
result = base64_api()
print(result)