vlambda博客
学习文章列表

自动化里的 验证码识别 你会吗?




参考文档 :https://ai.baidu.com/sdk#ocr



安装百度识别库


如果已安装pip,执行pip install baidu-aip即可。

pip install baidu-aip



百度识别文字


baidu_ocr.py

from aip import AipOcr


""" 你的 APPID AK SK """

APP_ID = '16846489'

API_KEY = 'apQRGrB63twTq3nrD4UgFoFT'

SECRET_KEY = 'TISjXmN8KVCrToKRX4rggX0bONs05tNV'

# 创建一个 百度文字识别的 客户端

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

# 读取图片的文件流信息

def read_image(pngfile):

    with open(pngfile,mode='rb') as f:

        return f.read()


# 根据文件流识别图像上的文字

def get_verifycode(imagefile):

    image = read_image(imagefile)

    #  调用百度的通用的文字识别方法

    res = client.basicGeneral(image)

    # print(res["words_result"])

    # 将结果整合为一个字符串


    text_result = res["words_result"]

    verycode=''    # 循环结果中的list

    for text in text_result:

        # print( text["words"])

        # 获取每一个 text["words"] 的值

        t = text["words"]

        word = t.replace(" ","")

        verycode+=word


    return verycode



if __name__ == '__main__':

    verifycode = get_verifycode('./verifycode.png')

    print(verifycode)




登录


login.py

from selenium import webdriver

from baidu_ocr import get_verifycode

from selenium.common.exceptions import NoSuchElementException

from selenium.webdriver.common.action_chains import ActionChains


import time

driver =  webdriver.Chrome()

driver.get("http://47.100.225.199/index.php?s=/index/user/logininfo.html")


driver.find_element_by_name('accounts').send_keys("helloworld")

driver.find_element_by_css_selector('[name="pwd"]').send_keys("123456")




"""

1.验证码截图

2.识别验证码

3.输入识别后的验证码

4.点击登录

"""

while True:

    # 验证码图片 元素

    verify_code = driver.find_element_by_css_selector('[id=

"form-verify-img"]')

    # 将元素截图到文件

    verify_code.screenshot('./verifycode.png')

    verify = get_verifycode('./verifycode.png')

    print(f'验证码为{verify}')

    try:

      verify_input= driver.find_element_by_css_selector

('[name="verify"]')

        verify_input.clear() # 清空文本        verify_input.send_keys(verify)

        driver.find_element_by_css_selector('button[class="am-btn am-btn-primary am-radius am-btn-sm btn-loading-example"]').click()

        verify_code.click()

        time.sleep(1)

        # 鼠标移动

        ActionChains(driver).move_by_offset(0,0).perform()

        time.sleep(1)


    except NoSuchElementException:

        break



print("登录成功")


以上登陆代码有些bug,你能发现吗?偶尔有时会登陆不成功。输入【fanmao】解锁🔓正确使用方式。


此处为语雀加密文本,点击链接查看:https://www.yuque.com/ifd39g/csgz0w/dqpc1g#ac4ig



往期精彩文章





了解更多软件测试信息