朋友说公司要在测试环境做接口测试,登录时需要传入正确的图片的验证码,本着懒省事的原则,推荐他把测试环境的图片验证码写死,我们公司也是这么做的^_^。劝说无果/(ㄒoㄒ)/~~,只能通过 OCR 技术来识别图片验证码了,看了一下他们的验证码,长这样,还好挺容易识别(背景色是透明的,有个坑需要处理)。
Python 实现了图片验证码登录 demo,用到的第三方模块有 requests, PIL, pytesseract。
1 # coding: utf-8 2 import requests 3 from PIL import Image 4 from pytesseract import image_to_string, pytesseract 5 6 pytesseract.tesseract_cmd = ‘D:\\env\\Tesseract-OCR\\tesseract‘ 7 # url 8 base_url = ‘https://hostxxx‘ 9 code_url = base_url + ‘/common-platform/code‘ 10 do_login_url = base_url + ‘/common-platform/doLogin‘ 11 12 13 # 空白背景色 pytesseract 无法识别,更换了一下背景色 14 def change_background(img_fp): 15 try: 16 img = Image.open(img_fp) 17 x, y = img.size 18 new_img = Image.new(‘RGBA‘, img.size, (255, 255, 255)) 19 new_img.paste(img, (0, 0, x, y), img) 20 return new_img 21 except: 22 print u‘更换图片背景失败‘ 23 24 25 # 识别图片验证码 26 def ocr2str(img): 27 return str(image_to_string(img)) 28 29 30 # 创建 session 31 session = requests.Session() 32 # 请求图片验证码接口 33 code_resp = session.request(method=‘GET‘, url=code_url, verify=False) 34 # 保存图片验证码 35 with open(‘code.png‘, ‘wb‘) as f: 36 f.write(code_resp.content) 37 # 验证码 38 code = ocr2str(change_background(‘code.png‘)) 39 # 登录数据 40 do_login_data = { 41 ‘userName‘: ‘user‘, 42 ‘password‘: ‘pwd‘, 43 ‘verificationCode‘: code 44 } 45 # 登录接口 46 do_login_resp = session.request(method=‘POST‘, url=do_login_url, data=do_login_data, verify=False) 47 print do_login_resp.text # 检验登录是否成功
时间: 2024-10-23 15:52:51