如何通过第三方打码平台实现验证码识别

案例介绍

本案例主要展示如何实现通过阿里云RPA工具调用第三方打码平台,解决验证码问题。

案例一

  1. 首先打开阿里云RPA控制台登录界面,然后通过连续输入几次账号密码错误让图像英文数字验证码显示出来

image
  1. 使用捕捉控件捕获账号密码输入框、验证码输入框、图像验证码、登录按钮,以及控制台登录成功后的首页菜单控件。

imageimage
  1. 编码模式下,代码示例如下:

from rpa.core import *
from rpa.utils import *
import rpa4 as rpa # 使用V4引擎
import requests
from hashlib import md5

# 您可调用任意第三方平台提供的验证码识别接口,本文以超级鹰平台的公开接口为例,下载接口脚本文件,将接口代码复制到下面代码后面即可,具体请见:https://www.chaojiying.com/api-14.html

def start():
    # 验证码截图存放路径
    screenshot_path = r'C:\Users\用户\Desktop\验证码.png'
    page = rpa.app.chrome.catch('阿里云RPA', mode='title', pattern='contain', timeout=10)
    
    # 首次登录失败,可以最多循环执行10次
    for i in range(10):
        page.input_text('输入账号','123', simulate=True)
        page.input_text('输入密码','123', simulate=True)
        bool1 = page.wait_loaded('验证码截图', timeout=3)
        if bool1:
            # 验证码截图
            page.screenshot('验证码截图',screenshot_path)
            # 识别验证码
            dis_code = OCR_recognition(screenshot_path)
            # 输入验证码
            page.input_text('输入验证码',dis_code, simulate=True)
        page.click('点击登录')
        # 根据控制台首页的控件来判断是否已成功登录
        bool2 = page.wait_loaded('控制台首页', timeout=3)
        if bool2:
            break



def OCR_recognition(screenshot_path):
    '''
    调用超级鹰OCR接口识别验证码
    '''
    captcha_user = '超级鹰用户名'
    captcha_pwd = '超级鹰用户名的密码'
    captcha_soft = '96001' # 用户中心>>软件ID 生成一个替换 96001
    captcha_cjy = Chaojiying_Client(captcha_user, captcha_pwd, captcha_soft)
    im = open(screenshot_path, 'rb').read()
    dis_result = captcha_cjy.PostPic(im, 1902) # 1902 验证码类型
    dis_code = dis_result['pic_str']
    print(dis_result)
    return dis_code

案例二

  1. 首先打开京东商智这个登录页面,然后选择账户登录方式把这个滑块界面显示出来

image
  1. 使用捕捉控件捕获拼图图片与拖动箭头的控件

imageimage

编码模式下,代码示例如下:

from rpa.core import *
from rpa.utils import *
import rpa4 as rpa # 使用V4引擎
import requests
from hashlib import md5

# 您可调用任意第三方平台提供的验证码识别接口,本文以超级鹰平台的公开接口为例,下载接口脚本文件,将接口代码复制到下面代码后面即可,具体请见:https://www.chaojiying.com/api-14.html

def start():
    # 验证码截图存放路径
    screenshot_path = r'C:\Users\用户\Desktop\滑动验证码.png'
    page = rpa.app.chrome.catch('京东商智', mode='title', pattern='contain')
    page.screenshot('滑块验证码截图',screenshot_path)
    # 识别验证码
    dis_code = OCR_recognition(screenshot_path)
    # 由于识别返回的坐标位置是凹槽中心坐标dis_code,需要滑动的距离是滑块中心坐标到凹槽的中心坐标之间的距离
    # 识别返回的坐标x轴值减去滑块一半的宽度即可
    distance_x = int(dis_code.split(',')[0])-27   #滑块一半的宽度是27
    print(distance_x)
    # 拖动滑块向横坐标移到指定距离
    page.drag('滑块',x=distance_x,y=0,speed_mode='uniform')

def OCR_recognition(screenshot_path):
    '''
    调用超级鹰OCR接口识别验证码
    '''
    captcha_user = '超级鹰用户名'
    captcha_pwd = '超级鹰用户名的密码'
    captcha_soft = '96001' # 用户中心>>软件ID 生成一个替换 96001
    captcha_cjy = Chaojiying_Client(captcha_user, captcha_pwd, captcha_soft)
    im = open(screenshot_path, 'rb').read()
    dis_result = captcha_cjy.PostPic(im, 9101) # 9101 验证码类型
    dis_code = dis_result['pic_str']
    print(dis_result)
    return dis_code

可视化模式下,流程搭建示例如下:

说明

# 您可调用任意第三方平台提供的验证码识别接口,本文以超级鹰平台的公开接口为例,下载接口脚本文件,将接口python代码复制到下面第一个调用自定义脚本中即可,具体请见:https://www.chaojiying.com/api-14.html

  1. 使用调用自定义脚本组件,将OCR接口python脚本代码与调用接口的方法一起写在编辑表达式中即可,调用接口函数方法可以参考上面编码示例中OCR_recognition()的函数。

    image
  2. 使用设置变量值组件,设置图片保存本地的路径。

  3. 使用获取已打开网页组件,获取京东商智页面对象。

    image
  4. 使用调用自定义脚本组件,先通过编码模式的控件截图组件截取验证码图片保存到本地,再将图片路径传给调用OCR接口函数识别验证码图片,并返回坐标结果。

    image
  5. 使用设置变量值组件,在编辑表达式中填写计算需要滑动的距离脚本

    说明

    # 由于识别返回的坐标位置是凹槽中心坐标dis_code,需要滑动的距离是滑块中心坐标到凹槽的中心坐标之间的距离

    # 识别返回的坐标x轴值减去滑块一半的宽度即可

    image
  6. 使用元素拖拽组件,移动滑块到指定位置

    image