pytest 识别登录时的验证码

在写自动化时,会遇到登录时需要设置验证码的问题,这时一般由两种方式:

方法一:请开发写一个万能验证码,直接登录即可;

方法一处理起来比较简单,不需要写代码处理,但是考虑到会有安全问题,部分项目无法适用,所以需要我们自己写代码读取并识别验证码。

方法二:写代码获取验证码,传入登录接口;

方法二主要是采用获取验证码图片+识别验证码,实现将验证码转换为字符串,传入登录接口即可。我这里的项目后端涉及到验证码base64转换,所以还会多一步解码过程。

环境配置

首先需要安装Tesseract-OCR、第三方库Pillow和pytesseract

安装Tesseract-OCR

下载地址:https://digi.bib.uni-mannheim.de/tesseract/
下载后直接安装,并配置环境变量
在这里插入图片描述
在这里插入图片描述

安装第三方库Pillow和pytesseract

pip3 install Pillow
pip3 install pytesseract
pip3 install tesseract

重启pycharm即可生效。

代码实现

在这里插入图片描述

总体思路如下:
获取base64加密的图片地址———>base64转换为图片——>图片写入文件——>识别验证码

# -*- coding: utf-8 -*-
from __future__ import print_function
from Common.handle_path import datas_dir
import base64
import requests
import pytesseract
from PIL import Image

"""获取登录页面base64加密验证码"""
url = "http://172.17.6.116:8001/api/user/kaptcha"
resp = requests.get(url)
im_base64_bytes = str.encode(resp.json()['data']['img'])  # 获取的base64密文转换为bytes类型
im_base64_to_image = base64.b64decode(im_base64_bytes)  # base64解码转换为图片
with open(datas_dir + r'/yzm.png', 'wb') as f:  # 将图片写入文件yzm.png
    f.write(im_base64_to_image)
    f.close()
im = Image.open(datas_dir + r'/yzm.png')
im.show()  # 将图片打开
text = pytesseract.image_to_string(im, lang='eng')
print(text)

运行结果与实际对比图如下:
在这里插入图片描述
代码识别的精确度有待提高,遇到比较复杂的可能读不准确甚至读不出来。。。后续再研究下怎么提高准确度吧

再附一个其他博主的代码,可参考学习,采取在页面获取图片xpath的方式完成,可供学习交流

from __future__ import print_function
from lxml import etree
import requests
import pytesseract
from PIL import Image
if __name__ == '__main__':
    # 获取页面数据
    url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
    page_text = requests.get(url=url).text
    # 解析出页面中图片的地址
    tree = etree.HTML(page_text)
    cod_img_src = 'https://so.gushiwen.cn' + tree.xpath('//*[@id="imgCode"]/@src')[0]
    cod_data = requests.get(url=cod_img_src).content
    with open('./code.jpg', 'wb') as fp:
        fp.write(cod_data)
    text = pytesseract.image_to_string(Image.open(r'./code.jpg'))
    print(text)
    

参考:https://www.jianshu.com/p/2db541800418

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值