菜单

滑块验证码自动处理(OCR识别)

标签:验证码 ,ocr ,OCR

 

以下案例是通过Python的OCR识别和元素拖拽来实现,操作过程很复杂。对此,我们在新版本中新增【滑块拼图验证码】等多个验证码自动处理的指令。大家可以直接使用该指令来完成验证码的自动识别处理,使用方法请点击:滑块拼图验证码   对Python感兴趣的同学可以继续学习下方案例。

一、案例简介

在访问网站时经常会遇到滑块验证码,这不利于流程的自动化。以下就通过两个实际案例来讲解如何使用八爪鱼RPA实现自动处理滑块验证码,分别是京东商家登录场景碰到的滑块验证码和腾讯滑块验证。两个场景都会用到通过Python调用ocr库识别验证码,但滑动方式不一样。

这个案例会用到Python指令,Python指令以来2个Python库,需要预先安装。如果您还没有安装Python环境,则需要先安装Python环境。

 

Python环境的安装:

此处我们使用Python 3.8.10版本,在 Windows 系统上安装 Python 3.8.10,可以按照以下步骤进行操作:

1.点击下载链接,将Python软件下载到本地:https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe

2.打开下载的安装程序(通常为 .exe 文件),运行安装程序。

3. 在安装程序界面中,勾选 "Add Python 3.8 to PATH" 选项,以便在命令行中可以直接使用 python 命令。

4. 点击 "Customize installation" 按钮,可以自定义安装的一些选项,如修改安装路径等。如果不需要特别设置,可以直接点击 "Install Now" 按钮继续安装。

5. 等待安装程序完成安装过程。安装完成后会弹出一个安装成功的提示框。

6. 打开命令提示符(Win + R,输入 "cmd" 并回车),输入 "python" 命令,如果成功显示 Python 版本号,则说明安装成功。安装成功后在进行Python库的安装。

 

Python库的安装:

键盘中按下Win+R,在运行框里输入cmd,然后在命令提示符中输入下方代码,再回车运行,最后静静等待安装完成。

pip install ddddocr  -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple

 

二、流程详细说明

想实现自动滑动滑块验证码,首要的是要计算滑动的距离,我们可通过执行Python代码,调用ddddocr组件来实现。ddddocr识别滑块验证码,需要获取到滑块验证码的背景和缺口图片,支持图片URL或者是图片文件(字节流)。

获取图片配置如下图:

注意:验证码图片必须是img标签,如果捕获的不是img,需要修改xpath,改成是定位到img。可打开该图片的原元素编辑器,校验xpath路径的最后一个是不是img。

 

获取到的图片src属性有可能是url和base64的图片内容,识别代码需要区分。所以流程中需要增加If条件,判断图片链接是否包含data:image/png;base64。

 

 

代码如下

#识别Base64格式的验证码
import ddddocr
det = ddddocr.DdddOcr(det=False, ocr=False, show_ad=False)
target_img = ddddocr.base64_to_image("滑块图片链接".replace("data:image/png;base64,",""))
background_img = ddddocr.base64_to_image("背景图片链接".replace("data:image/png;base64,",""))
target_img.save("target.png")
with open('target.png', 'rb') as f:
    target_content = f.read()
background_img.save("background.png")
with open('background.png', 'rb') as f:
    background_content = f.read()
res = det.slide_match(target_content, background_content, simple_target=True)
print(res)

#通过URL识别
import ddddocr
import requests
det = ddddocr.DdddOcr(det=False, ocr=False, show_ad=False)
target = requests.get("滑块图片链接")
background = requests.get("背景图片链接")
res = det.slide_match(target.content, background.content, simple_target=True)
print(res)

识别结果是缺口相对于背景图片的位置,即【缺口位置】

//target的四个值分别为:X、Y、宽、高
{'target_y': 0, 'target': [481, 85, 617, 221]}

 

得到这个数据后我们就知道滑块缺口在背景图片的位置了。执行滑动时需要知道滑块的【结束位置】,此外我们还需要知道滑块的【初始位置】。通过使用获取网页元素信息指令,可以获取滑块的【初始位置】

有了这两个数据,我们就能计算出滑块需要滑动到的位置坐标

Y坐标=滑块的起始Y坐标

X坐标=滑块的起始X坐标+滑块缺口相对验证码背景图片的位置(target[0])/验证码图片在网页上的缩放比例+误差值(根据实际效果微调)

接下来就可以执行滑动动作,案例中提供了两种滑动方式。

 

方式1:使用python+pyautogui,实现仿真滑动

流程步骤如下:

import pyautogui
# 设置起始位置
start_x = 验证码起点X
start_y = 验证码起点Y
# 计算终点位置
end_x = start_x+拖动距离
end_y = start_y
# 移动鼠标到起始位置
pyautogui.moveTo(start_x, start_y, duration=0.5)
# 按下鼠标左键
pyautogui.mouseDown()
# 往右多拖到20xp
pyautogui.moveTo(end_x + 20, end_y + 20, duration=0.5)
#拖回结束位置
pyautogui.moveTo(end_x, end_y, duration=0.5)
# 松开鼠标左键
pyautogui.mouseUp()

 

方式2:使用【拖拽网页(web)】指令,

这种方式的滑动轨迹比较线性,部分场景可能会无法滑动成功

流程步骤如下:

这样就实现了滑块验证码自动处理的设置,所有的滑块验证码都可以参照这个应用来设置。

三、应用获取

未下载客户端的,请先下载八爪鱼RPA客户端:https://rpa.bazhuayu.com/download 

安装好客户端后,点击或复制下方链接在浏览器打开,即可免费获得该滑块验证码自动识别的应用,快来获取和分享给其他人吧!https://rpa.bazhuayu.com/shareableLink/64b6b671936493a7b43d463b

 

欢迎大家扫码加入交流群,和大家一起交流

最近修改: 2024-03-15