朋友说公司要在测试环境做接口测试,登录时需要传入正确的图片的验证码,本着懒省事的原则,推荐他把测试环境的图片验证码写死,我们公司也是这么做的^_^。劝说无果/(ㄒoㄒ)/~~,只能通过 OCR 技术来识别图片验证码了,看了一下他们的验证码,长这样,还好挺容易识别(背景色是透明的,有个坑需要处理)。

Python 实现了图片验证码登录 demo,用到的第三方模块有 requests, PILpytesseract

 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  # 检验登录是否成功

 

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!