zoukankan      html  css  js  c++  java
  • 07-爬虫验证码破解实战

    验证码识别

    • 基于线上的打码平台识别验证码
    • 打码平台有:
      • 1,超级鹰(推荐)http://www.chaojiying.com/
      • 2,云打码
      • 打码兔等
        超级鹰的使用:
        1,注册登录购买账户积分
        在这里插入图片描述
        2,创建一个软件ID
        在这里插入图片描述

    创建好后就会生成一个id信息在这里插入图片描述
    3,选择超级鹰开发文档
    在这里插入图片描述
    选择对应的语言
    在这里插入图片描述

    点击下载在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    封装好的超级鹰打码平台的类

    # -*- coding: utf-8 -*-
    
    import requests
    from hashlib import md5
    
    class Chaojiying_Client(object):
    
        def __init__(self, username, password, soft_id):
            self.username = username
            password =  password.encode('utf8')
            self.password = md5(password).hexdigest()
            self.soft_id = soft_id
            self.base_params = {
                'user': self.username,
                'pass2': self.password,
                'softid': self.soft_id,
            }
            self.headers = {
                'Connection': 'Keep-Alive',
                'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
            }
    
        def PostPic(self, im, codetype):
            """
            im: 图片字节
            codetype: 题目类型 参考 http://www.chaojiying.com/price.html
            """
            params = {
                'codetype': codetype,
            }
            params.update(self.base_params)
            files = {'userfile': ('ccc.jpg', im)}
            r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
            return r.json()
    
        def ReportError(self, im_id):
            """
            im_id:报错题目的图片ID
            """
            params = {
                'id': im_id,
            }
            params.update(self.base_params)
            r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
            return r.json()
    
        def tranformImgCode(): #封装一个验证吗识别的函数
            chaojiying = Chaojiying_Client('gemoumou', '1234567', '906463')
            im = open('D:/py/Chaojiying_Python/code.jpg', 'rb').read()
            print(chaojiying.PostPic(im, 1902)['pic_str'])
    
            return (chaojiying.PostPic(im, 1902)['pic_str'])
    
    
    if __name__ == '__main__':
        Chaojiying_Client.tranformImgCode()
    
    #if __name__ == '__main__':
    # 	chaojiying = Chaojiying_Client('超级鹰用户名', '超级鹰用户名的密码', '96001')	#用户中心>>软件ID 生成一个替换 96001
    # 	im = open('a.jpg', 'rb').read()													#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
    # 	print chaojiying.PostPic(im, 1902)												#1902 验证码类型  官方网站>>价格体系 3.4+版 print 后要加()
    
    

    爬虫登录代码展示

    # -*- coding: utf-8 -*-
    import requests
    from lxml import etree
    from Chaojiying_Python import chaojiying
    import time
    
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
    
    } #模仿浏览器UA头
    
    session = requests.Session()# 动态获取cookie
    # 识别验证码
    url ="https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx"
    page_text = session.get(url=url,headers=headers).text
    # 解析验证码图片
    tree = etree.HTML(page_text)
    img_src = "https://so.gushiwen.cn/"+tree.xpath('//*[@id="imgCode"]/@src')[0]
    # 将验证码图片保存到本地
    img_data = session.get(img_src,headers=headers).content
    with open ('D:/py/Chaojiying_Python/code.jpg',"wb") as fp:
        fp.write(img_data)
    
    # 识别验证码
    code_text = chaojiying.Chaojiying_Client.tranformImgCode() #调用超级鹰打码平台识别出的验证码
    time.sleep(2)
    
    
    login_url = "https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx"
    data = {
        # 如果在请求参数中看见一组乱序的请求参数,需要抓包验证下是否动态变化如下:"__VIEWSTATE" "__VIEWSTATEGENERATOR"
        # 如果是动态变化的参数一般会隐藏在前台源码中,我们需要进行xpaht 或者正则 等方式进行提取 就可以获得实时的参数
        # 如果前台源码中没有,我们可以通过抓包全局收索获取对应的数据包提取参数赋值到data中
        "__VIEWSTATE": "wLzVsPN64jZIa8aQJI9HzVvaaknH6pBhUG+UOMQKX8NEFV49xwtLRgU8GH4O1o+mClDbtnYiKbXMOIM6VRh7HGzM4hpMpd0qBUM3b/pXlzZ2gnbcuB+5RUBJ/i0=",
        "__VIEWSTATEGENERATOR": "C93BE1AE",
        "from": "http://so.gushiwen.cn/user/collect.aspx",
        "email": "18398141234",
        "pwd": "123456",
        "code": code_text,# 验证码动态变化
        "denglu": "登录"
    }
    # 对点击登录按钮发起请求,获取了登录成功后的页面源码数据
    page_text_login = session.post(url = login_url,headers=headers,data=data).text
    print(page_text_login)
    
    
    
    

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    UVA 10462 Is There A Second Way Left?(次小生成树&Prim&Kruskal)题解
    POJ 1679 The Unique MST (次小生成树)题解
    POJ 2373 Dividing the Path (单调队列优化DP)题解
    BZOJ 2709 迷宫花园
    BZOJ 1270 雷涛的小猫
    BZOJ 2834 回家的路
    BZOJ 2506 calc
    BZOJ 3124 直径
    BZOJ 4416 阶乘字符串
    BZOJ 3930 选数
  • 原文地址:https://www.cnblogs.com/gemoumou/p/13635338.html
Copyright © 2011-2022 走看看