文本介绍了RPA流程自动化中处理滑动验证码的难点和解决方案。滑动验证码分为普通和带人机验证两类,需定位缺口和滑块计算滑动距离。对于未加密的验证码,可通过cv2计算缺口位置;加密的则可用第三方服务。具体步骤包括设计容错逻辑、截图验证码、识别坐标计算位移、滑动滑块,并提供了针对不同情况的具体操作步骤。
在进行RPA流程自动化的开发过程中,必然面临人机验证这一关卡。而验证码是大部分网站及应用采用的防护措施。其中滑动验证码解决难度较高,需要掌握一些技巧即可。
本文针对滑动验证码展开分析,滑动验证码一般有两类,一类普通的只需要滑动对地方即可,另一类额外加了人机验证的机制,滑动匀速、过快、过慢时,哪怕滑动位置正确等都会验证失败。
图 一 :RPA滑动位置正确,但被人机验证机制拒绝
解决滑动验证码的步骤无非就是两步:第一步,定位背景缺口和滑块位置,计算出需要滑动的距离。第二步,滑动对应的距离。
对于能够直接获取滑块小图与背景图的滑动验证码,通过使用cv2模块的matchTemplate函数,可以准确地计算出缺口位置。但是,在一些安全要求较高的网站中,已将滑块小图与背景图元素进行加密隐藏,无法直接获取。这种情况可以调用第三方提供的验证码识别服务(我们的设计器已经有集成好的组件),本文主要针对未隐藏元素的滑动验证码进行分析。(文章仅展示部分代码,工程附件自取)
图 二:未隐藏元素的滑动验证码
一 、普通滑块验证码(不写代码,验证码组件解决)
验证网站:https://www.geetest.com/show
第1步 设计循环容错逻辑保证验证成功,但不要写死循环,超过容错次数需结束循环
第2步 【元素截图】组件截取验证码图片
第3步 通过【验证码】组件识别(code:9000),返回1-2组坐标,然后解析坐标得出位移距离
返回值样例:【21,44】或【21,44,32,14】
识别的移动距离分别为21(一组坐标为第一个数字)或32(两组坐标为第三个数字)
第4步 根据解析出的距离滑动滑块
可以先用【获取元素位置】组件获取滑块坐标(x,y),【拖动】组件目标坐标(x+第三部算出的位移,y)
具体其他细节自行参考附件工程。
二、有人机验证机制滑块验证码(openCV算法计算位置,离线内网环境也可使用)
验证网站:https://passport.shop.jd.com/login/index.action某电商平台商家后台
第1步 设计循环容错逻辑保证验证成功,但不要写死循环,超过容错次数需结束循环
第2步 【元素截图】组件截取验证码大图及滑块小图
第3步 通过python的openCV库。计算出位移距离
第4步 根据解析出的距离,通过pyautogui模拟人工操作不匀速滑动滑块
工程见附件
NewProject1.rar(4.54MB)
推荐阅读