自动化里的 验证码识别 你会吗?
Posted 软件测试大师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化里的 验证码识别 你会吗?相关的知识,希望对你有一定的参考价值。
参考文档 :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】解锁
以上是关于自动化里的 验证码识别 你会吗?的主要内容,如果未能解决你的问题,请参考以下文章