美文网首页
python + captureCode

python + captureCode

作者: 手捧樱花v | 来源:发表于2020-03-06 15:09 被阅读0次
    • 原理 : 使用requests给验证码图片的url发送http请求(支持json或者form-data),将图片保存在本地(性能测试建议存储在nfs中),调用pillow模块中的Image和pytesseract对图片进行解析,最后使用requets发送登录请求,form-data会使用到requests_toolbelt
    • 环境准备 :
    pip install pytesseract
    pip install pillow
    pip install requests
    pip install requests_toolbelt
    
    • requests使用方法(传参为json/form-data):
    r = requests.post[*http请求方法](url,data=json.dumps("key":"value"))
    
    m = MultipartEncoder(
        fields={'field0': 'value', 'field1': 'value',
                'field2': ('filename', open('file.py', 'rb'), 'text/plain')}
        )
    
    r = requests.post('http://httpbin.org/post', data=m,
                      headers={'Content-Type': m.content_type})
    

    参考文档:https://2.python-requests.org//zh_CN/latest/user/quickstart.html

    • 根据requests的功能与预期结果比验证判断接口是否成功
    r.text: 返回response
    r.json(): 以json格式返回
    r.status_code: 返回状态码
    r.cookies: 获取cookies
    r.url: 判断发送请求的url (针对reference url)
    r.headers: 获得请求头消息等
    
    • 验证码获取
    code = pytesseract.image_to_string(Image.open(r'/图片路径'))
    

    参考文档: https://pillow.readthedocs.io/en/stable/reference/Image.html#examples

    代码示例

    import pytesseract
    from PIL import Image
    import requests
    from requests_toolbelt import MultipartEncoder
    class Py_demo:
        def __init__(self):
            pass
    
        def get_img(self,url,img_name):
            get_img = requests.get(url)
            print(get_img.url)
            if get_img.status_code != 200:
                print("get image failed")
                return False
            else:
                print("get image success,downloading~")
                with open(img_name,'wb') as file:
                    file.write(get_img.content)
    
    
        def get_code(self):
            global sakura
            sakura = pytesseract.image_to_string(Image.open(r'/Users/sakurahappy/Desktop/CaptchaImg.png'))
            if len(sakura) < 3:
                print("get code failed,try again")
            else:
                print("get code success")
                print(sakura)
                return sakura
    
        def log_in(self,url,username,password,sakura):
            m = MultipartEncoder(fields={'username': username, 'password': password,'checkCode':sakura,'clientsystem':'mactrue','clientscreensize':'1440,900','clientbrowser':'chrome74'})
            # print(m.content_type)
            # print(username,password,sakura)
            print(url)
            r = requests.post(url, data=m,headers={'Content-Type': m.content_type},allow_redirects=False)
            r = requests.get(img_url,cookies=r.cookies)
            print(r.status_code)
            print(r.url)
            if r.status_code == 200:
                print("cookies is ok,login success~")
                return True
            else:
                print("cookies is invalue, login failed")
                return False
    
    if __name__=='__main__':
        demo = Py_demo()
        get_img = demo.get_img(img_url,'CaptchaImg.png')
        get_code = demo.get_code()
        log_in = demo.log_in(url,username,password,sakura)
    
    

    相关文章

      网友评论

          本文标题:python + captureCode

          本文链接:https://www.haomeiwen.com/subject/souirhtx.html