Python 实现简单图片验证码登录

发表于:2017-8-07 13:13

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:臂力棒在想    来源:博客

  朋友说公司要在测试环境做接口测试,登录时需要传入正确的图片的验证码,本着懒省事的原则,推荐他把测试环境的图片验证码写死,我们公司也是这么做的^_^。劝说无果/(ㄒ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  # 检验登录是否成功
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • oldwai
    2018-2-23 12:19:49

    如何实现,执行代码报错了
    from PIL import Image
    from pytesseract import image_to_string, pytesseract

    pytesseract.tesseract_cmd = 'C:\Program Files (x86)\Tesseract-OCR'

    # 空白背景色 pytesseract 无法识别,更换了一下背景色
    def change_background(img_fp):
        try:
            img = Image.open(img_fp)
            x, y = img.size
            new_img = Image.new('RGBA', img.size, (255, 255, 255))
            new_img.paste(img, (0, 0, x, y), img)
            return new_img
        except:
            print (u'更换图片背景失败')

    # 识别图片验证码
    def ocr2str(img):
        return str(image_to_string(img))


    im = 'G:\\222222222\\code.png'
    # 验证码
    code = ocr2str(change_background(im))

    error信息如下:
      File "D:\Python35\lib\site-packages\pytesseract\pytesseract.py", line 66, in prepare
        raise TypeError('Unsupported image object')
    TypeError: Unsupported image object

  • mc02snx
    2017-9-05 22:02:42

    收藏一下,所以要Mark一下!

  • 神仙也考试
    2017-8-08 16:07:01

    收藏一下,所以要Mark一下!

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号