美文网首页
登录验证码识别

登录验证码识别

作者: mylemon | 来源:发表于2023-12-11 09:46 被阅读0次
    • 图鉴平台:http://www.ttshitu.com/ (推荐)

    • 超级鹰:https://www.chaojiying.com/about.html

    • 使用图鉴识别古诗文网登录中的验证码

      • 古诗文网:https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx

      • 使用流程:

        • 注册登录图鉴平台

        • 登录后,点击开发文档,提取识别的源代码

        • 模块(tujian.py)的封装:

        • import base64
          import json
          import requests
          # 一、图片文字类型(默认 3 数英混合):
          # 1 : 纯数字
          # 1001:纯数字2
          # 2 : 纯英文
          # 1002:纯英文2
          # 3 : 数英混合
          # 1003:数英混合2
          #  4 : 闪动GIF
          # 7 : 无感学习(独家)
          # 11 : 计算题
          # 1005:  快速计算题
          # 16 : 汉字
          # 32 : 通用文字识别(证件、单据)
          # 66:  问答题
          # 49 :recaptcha图片识别
          # 二、图片旋转角度类型:
          # 29 :  旋转类型
          #
          # 三、图片坐标点选类型:
          # 19 :  1个坐标
          # 20 :  3个坐标
          # 21 :  3 ~ 5个坐标
          # 22 :  5 ~ 8个坐标
          # 27 :  1 ~ 4个坐标
          # 48 : 轨迹类型
          #
          # 四、缺口识别
          # 18 : 缺口识别(需要2张图 一张目标图一张缺口图)
          # 33 : 单缺口识别(返回X轴坐标 只需要1张图)
          # 五、拼图识别
          # 53:拼图识别
          #函数实现忽略
          def base64_api(uname, pwd, img, typeid):
              with open(img, 'rb') as f:
                  base64_data = base64.b64encode(f.read())
                  b64 = base64_data.decode()
              data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}
              result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)
              if result['success']:
                  return result["data"]["result"]
              else:
                  return result["message"]
              return ""
          
          def getImgCodeText(imgPath,imgType):#直接返回验证码内容
              #imgPath:验证码图片地址
              #imgType:验证码图片类型
              result = base64_api(uname='xxx', pwd='xxx', img=imgPath, typeid=imgType)
              return result
          
          
        • 验证码图片识别操作

    from lxml import etree
    import requests
    import tujian
    headers = {
       'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
    }
    #将验证码图片请求后保存到本地
    login_url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
    page_text = requests.get(url=login_url,headers=headers).text
    tree = etree.HTML(page_text)
    img_src = 'https://so.gushiwen.cn'+tree.xpath('//*[@id="imgCode"]/@src')[0]
    code_data = requests.get(url=img_src,headers=headers).content
    with open('./code.jpg','wb') as fp:
       fp.write(code_data)
    
    #识别验证码图片内容
    result = tujian.getImgCodeText('./code.jpg',3)
    print(result)
    

    模拟登录

    • 古诗文网

    • 在抓包工具里定位点击登录按钮后对应的数据包:

      • 只要数据包的请求参数中包含用户名,密码和验证码则该数据包就是我们要定位的

      • 首次模拟登录操作:

    from lxml import etree
    import requests
    import tujian
    headers = {
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
    }
    #将验证码图片请求后保存到本地
    login_url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
    page_text = requests.get(url=login_url,headers=headers).text
    tree = etree.HTML(page_text)
    img_src = 'https://so.gushiwen.cn'+tree.xpath('//*[@id="imgCode"]/@src')[0]
    code_data = requests.get(url=img_src,headers=headers).content
    with open('./code.jpg','wb') as fp:
        fp.write(code_data)
    
    #识别验证码图片内容
    result = tujian.getImgCodeText('./code.jpg',3)
    print(result)
    #模拟登录
    url = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'
    data = {
        "__VIEWSTATE": "opfVI7oolwkr7MLRVzsNSMASqLRUuO1dg5ZP5EIRa4FyM+mOYKEs6KWEKQKaba2ulLoZQIaLFiKK4mr5K3ci1v8ua28wtcRtabKWjOtJtU/i2etH+zSduegTMcg=",
        "__VIEWSTATEGENERATOR": "C93BE1AE",
        "from": "http://so.gushiwen.cn/user/collect.aspx",
        "email": "xxxx",
        "pwd": "xxxx",
        "code":result ,
        "denglu": "登录"
    }
    #获取了登录成功后的页面源码数据
    login_page_text = requests.post(url=url,headers=headers,data=data).text
    with open('wushiwen.html','w') as fp:
        fp.write(login_page_text)
    
    *   查看gushiwen.html发现,没有登录成功,原因:
    
        *   验证码不对(否定)
    
        *   没有携带cookie
    
        *   出现了动态变化的请求参数
    
            *   如何获取动态变化的请求参数
                *   基于抓包工具进行全局搜索,发现该参数值被隐藏在了登录页面的页面源码中
    
    from lxml import etree
    import requests
    import tujian
    headers = {
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
    }
    #创建session对象
    session = requests.Session()
    
    #将验证码图片请求后保存到本地
    login_url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
    page_text = session.get(url=login_url,headers=headers).text
    tree = etree.HTML(page_text)
    img_src = 'https://so.gushiwen.cn'+tree.xpath('//*[@id="imgCode"]/@src')[0]
    code_data = session.get(url=img_src,headers=headers).content
    with open('./code.jpg','wb') as fp:
        fp.write(code_data)
    
    #解析出动态变化的请求参数
    __VIEWSTATE = tree.xpath('//*[@id="__VIEWSTATE"]/@value')[0]
    
    #识别验证码图片内容
    result = tujian.getImgCodeText('./code.jpg',3)
    print(result)
    #模拟登录
    url = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'
    data = {
        "__VIEWSTATE": __VIEWSTATE,
        "__VIEWSTATEGENERATOR": "C93BE1AE",
        "from": "http://so.gushiwen.cn/user/collect.aspx",
        "email": "xxxx",
        "pwd": "xxxx",
        "code":result ,
        "denglu": "登录"
    }
    #获取了登录成功后的页面源码数据
    login_page_text = session.post(url=url,headers=headers,data=data).text
    with open('wushiwen.html','w') as fp:
        fp.write(login_page_text)
    

    相关文章

      网友评论

          本文标题:登录验证码识别

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