zoukankan      html  css  js  c++  java
  • python结合百度开放平台的文字识别进行验证码处理

    1.注册百度开放平台(百度)

    2.获取百度appid ak  sk

    3.接口如下

    # 验证码的识别
    def discern_captcha(yzmfile):
    
        """你的百度 APPID AK SK"""
        APP_ID = '00000000'
        API_KEY = 'xxxxxxxxxxxxxxxx'
        SECRET_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
    
        client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
        """ 读取图片 """
        def get_file_content(yzmfile):
            with open(yzmfile, 'rb') as fp:
                return fp.read()
    
        image = get_file_content(yzmfile)
    
        """ 调用通用文字识别(高精度版) """
        res = client.basicAccurate(image)
        # 遍历结果 将所有的文字都合并到一起
        strx = ""
        for tex in res["words_result"]:
            strx += tex["words"]
        # 输出验证码
        print('验证码为:'+ strx)
        return strx

    4.有了接口,接下来就是获取对应的验证码图片

    """获取url验证码,截屏保存到本地,再截取验证码位置"""
    uuid = int(round(time.time() * 1000))
    print(uuid)
    url = "http://192.168.16.11:8082/login"
    driver.get(url)
    sleep(2)
    # 刷新
    driver.refresh()
    sleep(3)
    
    imgfile = 'D:/seleniumIDE/yanzma/'+str(uuid)+'.png'
    # 截取屏幕内容,保存到本地
    driver.get_screenshot_as_file(imgfile)
    
    # 截取屏幕内容 方法二
    # driver.save_screenshot(imgfile)
    print("截屏OK")
    # 3、打开截图,获取验证码位置,截取保存验证码
    ran = Image.open(imgfile)
    
    # 参数说明
    # 第一个参数 开始截图的x坐标
    # 第二个参数 开始截图的y坐标
    # 第三个参数 结束截图的x坐标
    # 第四个参数 结束截图的y坐标
    # bbox = (760, 0, 1160, 1080)
    # im = ImageGrab.grab(bbox)
    # # 参数 保存截图文件的路径
    # im.save('yzm.png')
    box = (1405, 480, 1500, 520)  # 获取验证码位置,使用了手动定位,代表(左,上,右,下)
    print("截图OK")
    ran.crop(box).save("D:/seleniumIDE/yanzma/"+str(uuid)+"02.png")

    以上需要根据实际调整

    5. 读取验证码后,就在实际中使用demo

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import time
    from aip import AipOcr
    from PIL import Image, ImageEnhance, ImageGrab
    from time import sleep
    from selenium.webdriver.common.keys import Keys
    
    driver = webdriver.Chrome()
    driver.maximize_window()
    """ 你的 APPID AK SK """
    APP_ID = '00000000'
    API_KEY = 'xxxxxxxxxxxxxx'
    SECRET_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
    
    client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
    
    """获取url验证码,截屏保存到本地"""
    uuid = int(round(time.time() * 1000))
    print(uuid)
    url = "http://192.168.16.11:8082/login"
    driver.get(url)
    sleep(2)
    # 刷新
    driver.refresh()
    sleep(3)
    imgfile = 'D:/seleniumIDE/yanzma/'+str(uuid)+'.png'
    # 截取屏幕内容,保存到本地
    driver.get_screenshot_as_file(imgfile)
    # 截取屏幕内容 方法二
    # driver.save_screenshot(imgfile)
    print("截屏OK")
    # 3、打开截图,获取验证码位置,截取保存验证码
    ran = Image.open(imgfile)
    
    # 参数说明
    # 第一个参数 开始截图的x坐标
    # 第二个参数 开始截图的y坐标
    # 第三个参数 结束截图的x坐标
    # 第四个参数 结束截图的y坐标
    # bbox = (760, 0, 1160, 1080)
    # im = ImageGrab.grab(bbox)
    # # 参数 保存截图文件的路径
    # im.save('zy.png')
    box = (1405, 480, 1500, 520)  # 获取验证码位置,自动定位不是很清晰,就使用了手动定位,代表(左,上,右,下)
    print("截图OK")
    ran.crop(box).save("D:/seleniumIDE/yanzma/"+str(uuid)+"02.png")
    
    # # 4、获取验证码图片,读取验证码
    # imageCode = Image.open("D:/seleniumIDE/yanzma/"+str(uuid)+"02.png")  # 图像增强,二值化
    # # imageCode.load()
    # sharp_img = ImageEnhance.Contrast(imageCode).enhance(2.0)
    # sharp_img.save("D:/seleniumIDE/yanzma/"+str(uuid)+"03.png")
    # sharp_img.load()  # 对比度增强
    # time.sleep(2)
    # print(sharp_img)
    # # code = pytesseract.image_to_string(sharp_img).strip()
    
    """ 读取图片 """
    def get_file_content(filePath):
        with open(filePath, 'rb') as fp:
            return fp.read()
    
    image = get_file_content("D:/seleniumIDE/yanzma/"+str(uuid)+"02.png")
    
    """ 调用通用文字识别(高精度版) """
    res = client.basicAccurate(image)
    print(res)
    # 遍历结果 将所有的文字都合并到一起
    strx=""
    for tex in res["words_result"]:
        strx+=tex["words"]
    # 输出验证码
    print(strx)
    sleep(2)
    driver.find_element(By.CSS_SELECTOR, ".el-form-item:nth-child(1) .el-input__inner").click()
    driver.find_element(By.CSS_SELECTOR, ".el-form-item:nth-child(1) .el-input__inner").send_keys("admin")
    driver.find_element(By.CSS_SELECTOR, ".el-input--suffix > .el-input__inner").send_keys("admin")
    driver.find_element(By.CSS_SELECTOR, ".el-form-item:nth-child(3) .el-input__inner").send_keys(strx)
    # driver.find_element(By.CSS_SELECTOR, ".el-button").click()sleep(10)
    #driver.find_element(By.CSS_SELECTOR, ".el-button > span").click()
    driver.find_element(By.CSS_SELECTOR, ".el-button").send_keys(Keys.ENTER)
    
    sleep(19)
    driver.close()

    只是普通Demo

  • 相关阅读:
    hdu 1599 find the mincost route (最小环与floyd算法)
    hdu 3371(prim算法)
    hdu 1598 find the most comfortable road (并查集+枚举)
    hdu 1879 继续畅通工程 (并查集+最小生成树)
    hdu 1272 小希的迷宫(并查集+最小生成树+队列)
    UVA 156 Ananagrams ---map
    POJ 3597 Polygon Division (DP)
    poj 3735 Training little cats 矩阵快速幂+稀疏矩阵乘法优化
    poj 3734 Blocks 快速幂+费马小定理+组合数学
    CodeForces 407B Long Path (DP)
  • 原文地址:https://www.cnblogs.com/zxh06820/p/14651654.html
Copyright © 2011-2022 走看看