appium+aircv解决滑块图片验证码问题
因为登录接了阿里聚安全的安全验证,有图片滑块验证,暂时通过处理图片解决了,待后续优化及试验实际操作情况。
先放一个解决效果图
verfy.gif
解决方案
通过opencv里边的aircv处理图片识别及获取到对应坐标,然后通过appium的swipe滑动解决。
依赖内容
brew install opencv3
对应python3版本安装opencv3
到brew安装目录/usr/local/Cellar/
找到opencv的cv2.so文件
pyenv的安装目录在~/.pyenv/versions/
,找到py3的site-packages,在site-packages目录创建cv2.so文件的符号链接
ln -s /usr/local/Cellar/opencv/3.4.2/lib/python3.7/site-packages/cv2.cpython-37m-darwin.so cv2.so
安装完成后
import cv2
检查是否安装成功
若出现ImportError: numpy.core.multiarray failed to import
报错
pip3 install numpy
解决
安装aircv pip install aircv
具体操作
首先将原图中目标内容分解出来
go03.png
渠道目标滑块及目标位置图标
logo.png
pos3.png
设计取目标图片最好越小越好(也待具体实践验证)。
通过aircv的find_template方法获取识别内容
find_template(im_source, im_search, threshold=0.5, rgb=False, bgremove=False)
res = ac.find_template(imgSrc, imgTarPic)
if res:
position1 = res['result']
print(position1)
else:
print("未识别到目标图片")
获取到正常结果
(239.5, 1350.0)
获取到logo的位置及目标位置后就可以通过swipe方法去操作了,有滑块验证码可能还做了更细节的功能验证滑动动作的轨迹、速率等步骤来判断是否为人为操作,后续滑动动作需依赖具体情况做进一步处理。
self.driver.swipe(x, y, xt, yt, 3000)
效果就是最开始的动图内容。
后续需实践验证识别成功率问题、不同机型、不同分辨率计算图片位置问题。