玩蛇网提供最新Python编程技术信息以及Python资源下载!
您现在的位置: 玩蛇网首页 > Python源码实例_Python程序源代码_网站项目下载 > 正文内容

Python3.2模拟webqq登录方法源代码分享下载

Python入门佳作 经典教程的全新修订 10个项目引人入胜
玩蛇网推荐图文教程:python黑客多线程扫描器

Python玩蛇网本文中使用了Python3.2模拟webqq登,并提供了Python源码和简单的讲解,同时用到了hashlib等一些不太常用的python模块及方法。使用python还可以登陆例如知乎等其它类型和网站,如果你的编码能力够强大,一些代验证码的网站可以顺利的模拟登录哦。

python3.2模拟登录webqq

Python3.2模拟webqq登录方法源代码分享下载:

#开始导入需要使用的python模块及方法
import hashlib
from urllib import request,parse
from http import cookiejar
import re,random,time
import threading as th
import json.encoder as json_encode
import json.decoder as json_decode


class QQ:
    """
     Login QQ
    """
    __headers ={
                'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.9 Safari/534.30',\
                'Referer':'http://ui.ptlogin2.qq.com/cgi-bin/login?target=self&style=5&mibao_css=m_webqq&appid=1003903&enable_qlogin=0&no_verifyimg=1&s_url=http%3A%2F%2Fwebqq.qq.com%2Floginproxy.html&f_url=loginerroralert&strong_login=1&login_state=10&t=20110909003'\
    }
    __cookiepath = 'C:\\Users\\dingyangfan\\Desktop\php\\tt.txt'
    __qq = None
    __pswd = None
    __verifycode = None
    __clientid = 21628014
    __http = {}
    __psessionid = ''
    __ptwebqq = ''
    __vfwebqq = ''
    __skey = ''
    __poll2 = None
    __get_msg_tip = None
    __rc = 0
    __send_num = 31330000
    
    def __init__(self):
        self.httpproess()
        self.__Login()
        pass
    
    def __preprocess(self,password,verifycode):
        """
            QQ密码加密部份
        """
        return hashlib.md5( (self.__md5_3((password).encode('utf-8')) + (verifycode).upper()).encode('utf-8')).hexdigest().upper()
        pass

    
    def __md5_3(self,str):
        """
            QQ密码md5_3部份
        """
        return hashlib.md5(hashlib.md5(hashlib.md5(str).digest()).digest()).hexdigest().upper()
        pass
    
    def httpproess(self):
        """
            初始化模拟进程
        """
        self.__http['cj'] = cookiejar.MozillaCookieJar(self.__cookiepath)
        self.__http['opener'] = request.build_opener(request.HTTPCookieProcessor(self.__http['cj']))
        return self.__http
        pass
    
    def __request(self,url,method='GET',data={},savecookie=False):
        """
            请求url
        """
        if (method).upper() == 'POST':
            data = parse.urlencode(data).encode('utf-8')
            self.__http['req'] = request.Request(url,data,self.__headers)
        else:
            self.__http['req'] = request.Request(url=url,headers=self.__headers)
        fp = self.__http['opener'].open(self.__http['req'])
        try:
            str = fp.read().decode('utf-8')
        except UnicodeDecodeError:
            str = fp.read()
        if savecookie == True:
            self.__http['cj'].save(ignore_discard=True,ignore_expires=True)
        fp.close()
        return str
        pass
    
    def __getcookies(self,name):
        fp = open(self.__cookiepath)
        fp.seek(130)
        for read in fp.readlines():
            str
2000
 = read.split(name)
            if len(str) == 2:
                fp.close()
                return str[1].strip()
        fp.close()
        return None
        pass
    
    def __getverifycode(self):
        """
            @url:http://ptlogin2.qq.com/check?uin=644826377&appid=1003903&r=0.56373973749578
        """
        urlv = 'http://ptlogin2.qq.com/check?uin='+ ('%s' % self.__qq)+'&appid=1003903&r='+ ('%s' % random.Random().random())
        str = self.__request(url = urlv, savecookie=True)
        str = re.findall(r'\d|(?<=\')[a-zA-Z0-9\!]{4}',str)
        return str
        pass
    
    def __request_login(self):
        """
            @url:http://ptlogin2.qq.com/login
            @params:{u:644826377
                    p:73DA5C1145E0F82247F60B3A17B89E6A   verifycode:!S10   webqq_type:10
                    remember_uin:1  login2qq:1  aid:1003903  u1:http://webqq.qq.com/loginproxy.html?login2qq=1&webqq_type=10
                    h:1  ptredirect:0   ptlang:2052  from_ui:1   pttype:1  dumy:
                    fp:loginerroralert   action:1-24-62651  mibao_css:m_webqq}
        """
        urlv = 'http://ptlogin2.qq.com/login?u='+('%s' %  self.__qq) +'&' +  'p=' + ('%s' % self.__pswd) +  '&verifycode='+ ('%s' % self.__verifycode[1]) +'&remember_uin=1&aid=1003903' +  "&u1=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html%3Fstrong%3Dtrue" +  '&h=1&ptredirect=0&ptlang=2052&from_ui=1&pttype=1&dumy=&fp=loginerroralert'
        str = self.__request(url = urlv,savecookie=True)
        
        if str.find('登录成功') != -1:
            #执行二次登录
            self.__ptwebqq = self.__getcookies('ptwebqq')
            self.__skey = self.__getcookies('skey')
            self.__request_post()
        elif str.find('不正确') != -1:
            print('你输入的帐号或者密码不正确,请重新输入。')
        else:
            print('登录失败')
        pass
    
    def __request_post(self):
        '''
		    http://d.web2.qq.com/channel/login2
            r:{"status":"online","ptwebqq":"95b148b95af9be7677757b3a629e3904f52f153d0b714c527f81f8d9e385867a","passwd_sig":"",
            "clientid":"21628014","psessionid":null}
            clientid:21628014
            psessionid:null
        '''
        self.__headers.update({'Referer':'http://d.web2.qq.com/proxy.html?v=20110331002&callback=2'})
        a = {'status':'online','ptwebqq':self.__getcookies('ptwebqq'),'passwd_sig':'','clientid':self.__clientid,'psessionid':'null'}
        array = {'r':json_encode.JSONEncoder().encode(a),'clientid':self.__clientid,'psessionid':'null'}
        url = 'http://d.web2.qq.com/channel/login2'
        str = self.__request(url,'POST',array)
        str = json_decode.JSONDecoder().decode(str)
        self.__psessionid = str['result']['psessionid']
        self.__vfwebqq = str['result']['vfwebqq']
        self.__get_friend_info2()
        self.__get_user_friends2()
        self.__get_group_name_list_mask2()
        self.__poll2_()
        self.__get_msg_tip_()
        pass
    
    def __poll2_(self):
        """
            不知道干嘛的,一分钟连接一次,属于长连接,接收消息
            @url:http://d.web2.qq.com/channel/poll2
            r:{"clientid":"9467930","psessionid":"8368046764001e636f6e6e7365727665725f77656271714031302e3132382e36362e31313500003058000000c0026e040009456f266d0000000a407169446b464737436b6d00000028f8d256743e5c191cb40a2217845fab12fda62acd2e6145ae196976d7a8b3bb11a64d3c9565868322","key":0,"ids":[]}
            clientid:9467930
            psessionid:8368046764001e636f6e6e7365727665725f77656271714031302e3132382e36362e31313500003058000000c0026e040009456f266d0000000a407169446b464737436b6d00000028f8d256743e5c191cb40a2217845fab12fda62acd2e6145ae196976d7a8b3bb11a64d3c9565868322
        """
        self.__headers.update({'Referer':'http://d.web2.qq.com/proxy.html?v=20110331002&callback=2'})
        urlv = 'http://d.web2.qq.com/channel/poll2'
        a = {'clientid':self.__clientid,'psessionid':self.__psessionid,'key':0,'ids':[]}
        array = {'r':json_encode.JSONEncoder().encode(a),'clientid':self.__clientid,'psessionid':self.__psessionid}
        self.__poll2 = self.__request(url = urlv,method='POST',data = array)
        str = json_decode.JSONDecoder().decode(self.__poll2)
        print(str)
        
        if str['retcode'] == 0:
            if str['result'][0]['poll_type'] == 'message':
                self.__message(str['result'][0]['value']['from_uin'])
            elif str['result'][0]['poll_type'] == 'group_message':
                self.__group_message(str['result'][0]['value']['from_uin'])
                pass
        
        t1 = th.Timer(1,self.__poll2_)
        t1.start()
        pass
    
    def __get_msg_tip_(self):
        """
            #也不知道是什么,反正一直请求
            @url:http://webqq.qq.com/web2/get_msg_tip?uin=&tp=1&id=0&retype=1&rc=64&lv=2&t=1315746772886
        """
        self.__headers.update({'Referer':'http://webqq.qq.com/'})
        self.__rc += 1
        num = 100 + self.__rc
        t = '%s' % '%d' % time.time() + '%s' % num
        urlv = 'http://webqq.qq.com/web2/get_msg_tip?uin=&tp=1&id=0&retype=1&rc='+'%s'% self.__rc +'&lv=3&t=' + t
        self.__get_msg_tip = self.__request(urlv)
        print(self.__get_msg_tip)
        t2 = th.Timer(60,self.__get_msg_tip_)
        t2.start()
        pass
    
    def __get_friend_info2(self):
        '''
            @url:http://s.web2.qq.com/api/get_friend_info2?tuin=self.__qq&verifysession=&code=&vfwebqq=self.__vfwebqq
        '''
        self.__headers.update({'Referer':'http://s.web2.qq.com/proxy.html?v=20110412001&callback=1&id=2'})
        url = 'http://s.web2.qq.com/api/get_friend_info2?tuin='+ self.__qq + '&verifysession=&code=&vfwebqq=' + self.__vfwebqq + '&t=%s' % '%d' % time.time() + '100'
        str = self.__request(url)
        print(str)
        pass
    
    def __get_user_friends2(self):
        '''
            @url:http://s.web2.qq.com/api/get_user_friends2
        '''
        self.__headers.update({'Referer':'http://s.web2.qq.com/proxy.html?v=20110412001&callback=1&id=2'})
        url = 'http://s.web2.qq.com/api/get_user_friends2'
        a = {'h':'hello','vfwebqq':self.__vfwebqq}
        array = {'r':json_encode.JSONEncoder().encode(a)}
        str = self.__request(url,'POST',array)
        print(str)
        pass
    
    def __get_group_name_list_mask2(self):
        '''
            @url:http://s.web2.qq.com/api/get_group_name_list_mask2
        '''
        self.__headers.update({'Referer':'http://s.web2.qq.com/proxy.html?v=20110412001&callback=1&id=2'})
        url = 'http://s.web2.qq.com/api/get_group_name_list_mask2'
        a = {'vfwebqq':self.__vfwebqq}
        array = {'r':json_encode.JSONEncoder().encode(a)}
        str = self.__request(url,'POST',array)
        print(str)
        pass
    
    def __send_message(self,uid,msg):
        '''
            @url:http://d.web2.qq.com/channel/send_buddy_msg2
            r:{"to":3023379661,"face":180,"content":"[\"哈哈\",\"\\n【提示:此用户正在使用WebQQ:http://webqq.qq.com/】\",[\"font\",               {\"name\":\"宋体\",\"size\":\"10\",\"style\":[0,0,0],\"color\":\"000000\"}]]","msg_id":31330001,"clientid":"76133590",                    "psessionid":"s"}
                clientid:76133590
                psessionid:s

            Referer:http://d.web2.qq.com/proxy.html?v=20110331002&callback=2
            {"retcode":0,"result":"ok"}
        '''
#www.iplaypython.com

        self.__send_num +=1
        msg = "[\""+ msg +"\",[\"font\",{\"name\":\"宋体\",\"size\":\"10\",\"style\":[0,0,0],\"color\":\"000000\"}]]"
        self.__headers.update({'Referer':'http://d.web2.qq.com/proxy.html?v=20110331002&callback=2'});
        url = 'http://d.web2.qq.com/channel/send_buddy_msg2'
        a = {'to':uid,'face':180,'content':msg,'msg_id':self.__send_num,'clientid':self.__clientid,'psessionid':s
1c42
elf.__psessionid}
        array = {'r':json_encode.JSONEncoder().encode(a),'clientid':self.__clientid,'psessionid':self.__psessionid}
        str = self.__request(url,'POST',array)
        print(str)
        pass
    def __message(self,uid):
        '''
            {"retcode":0,"result":[{"poll_type":"message","value":{"msg_id":13013,"from_uin":3023379661,"to_uin":644826377,"msg_id2":503935,"msg_type":9,"reply_ip":176752345,"time":1316143960,"content":[["font",{"size":13,"color":"000000","style":[0,0,0],"name":"\u5B8B\u4F53"}],"\u4E0D\u662F\u5427\u3002"]}}]}

        '''
        self.__send_message(uid,'我是机器人%s' % time.time())
        pass
    def __send_group_message(self,gid,msg):
        '''
            @url:http://d.web2.qq.com/channel/send_qun_msg2
            r:{"group_uin":1132101900,"content":"[\"哈哈哈,测试\",\"\\n【提示:此用户正在使用WebQQ:http://webqq.qq.com/】\",[\"font\",           {\"name\":\"宋体\",\"size\":\"10\",\"style\":[0,0,0],\"color\":\"000000\"}]]","msg_id":31330002,"clientid":"76133590",
            "psessionid":"a"}
            clientid:76133590
            psessionid:a

            Referer:http://d.web2.qq.com/proxy.html?v=20110331002&callback=2

            {"retcode":0,"result":"ok"}
        '''
        self.__send_num +=1
        msg = "[\"" +msg + "\",[\"font\",{\"name\":\"宋体\",\"size\":\"10\",\"style\":[0,0,0],\"color\":\"000000\"}]]"
        self.__headers.update({'Referer':'http://d.web2.qq.com/proxy.html?v=20110331002&callback=2'});
        url = 'http://d.web2.qq.com/channel/send_qun_msg2'
        a = {'group_uin':gid,'content':msg,'msg_id':self.__send_num,'clientid':self.__clientid,'psessionid':self.__psessionid}
        array = {'r':json_encode.JSONEncoder().encode(a),'clientid':self.__clientid,'psessionid':self.__psessionid}
        str = self.__request(url,'POST',array)
        print(str)
        pass
    def __group_message(self,gid):
        '''
            {"retcode":0,"result":[{"poll_type":"group_message","value":{"msg_id":8044,"from_uin":1132101900,"to_uin":644826377,"msg_id2":178306,"msg_type":43,"reply_ip":2886742214,"group_code":317106137,"send_uin":3023379661,"seq":10654,"time":1316143836,"info_seq":32946855,"content":[["font",{"size":13,"color":"000000","style":[0,0,0],"name":"\u5B8B\u4F53"}],"\u5DE5"]}}]}

        '''
        self.__send_group_message(gid,'我是机器人%s' % time.time())
        pass
    def __Login(self):
        """
            qq登录
        """
        self.__qq = input('QQ号:')
        self.__pswd = input('QQ密码:')
        self.__qq = self.__qq.strip()
        self.__pswd = self.__pswd.strip()
        self.__verifycode = self.__getverifycode()
        self.__pswd = self.__preprocess(
            self.__pswd,#密码 \
            '%s' % self.__verifycode[1]  #验证码 \
        )
        self.__request_login()
        pass

s = QQ()

以下为一个简单的说明,指示了每一项代表的使用方法含义。就不在代码中做注释说明了,大家在用这个Python3.2模拟webqq登录代码的时候参考着看看吧。

QQ这个是qq控制类
.__headers,开英文就知道了,这是模拟qq的头信息
.__qq 这是qq号
.__pswd 这是qq密码
.__verifycode 这是qq验证码
.__clientid获取到客户端的ID信息
.__http 这是装载了远程连接类的一个属性
.__psessionid 这是持续session 的cookies id
.__ptwebqq
.__rc 不知道
.__send_num 为自行定义一个数字,目的是为了实现某些方法的累加,之后将信息发送出去的效果;
.__init__() 初始化qq模拟类
.__preprocess() 这是qq密码部份的模拟md5 .httpproess() 初始化cookie,初始化远程连接
.__request() 这是打开连接连接的方法
.__getcookies() 这是获取已经存在cookies的方法
.__vfwebqq  .__poll2 这是接收最新消息的属性
.__get_msg_tip 这是持续在线的属性
.__getverifycode() 这是一个获取验证码的方法 
.__request_login() 第一次登录 get
.__request_post() 第二次登录 post
.__poll2_() 实时的获取最新的消息
.__get_msg_tip_() 让模拟qq持续在线
.__get_friend_info2() 获取个人信息
.__get_user_friends2() 获取好友的基本信息
.__get_group_name_list_mask2() 获取群组信息
.__send_message() 发送消息
.__message() 获取消息
.__send_group_message() 发送群消息
.__group_message() 获取群消息
.__Login() 执行登录命令

这篇关于Python3.2模拟webqq登录方法源代码分享下载的源代码其实并不太长,去除Python注释部分还是很好理解的。大都是请求获取模仿之类的操作,把这些python代码分段理解效果会更好。

玩蛇网文章,转载请注明出处和来源网址:http://www.iplaypython.com/code/c2704.html



微信公众号搜索"玩蛇网Python之家"加关注,每日最新的Python资讯、图文视频教程可以让你一手全掌握。强烈推荐关注!

微信扫描下图可直接关注

玩蛇网PythonQQ群,欢迎加入: ① 240764603 玩蛇网Python新手群
出炉日期:2015-12-21 10:47 玩蛇网 www.iplaypython.com

我要分享到:
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules