def CheckVerify(self,uin):

check="h"

check=check.replace('{uin}',uin)

pattern=re.compile("ptui_checkVC′(.∗)′,′(.∗)′,′(.∗)′;")

result=self.Get(check)

checked= pattern.search(result).groups()

print 'Step1: CheckVerify'

return checked

获取验证码的方法

[python] view plain copy

def GetVerify(self):

#url = 'hage?&uin='+str(self.QQ)+'&aid=1002101&0.45644426648505' + str(random.randint(10,99))

verify="htqq.com/getimage?aid=1003903&r=0.6472875226754695&uin={QQ}&cap_cd=aSD-ZVcNEcozlZUurhNYhp-MBHf4hjbJ"

verify=verify.replace('{QQ}',self.QQ)

path= r"c:/verify/1.jpg"

#data = urllib.urlretrieve(url,path)

data = urllib2.urlopen(verify)

localPic =open(r"c:/verify/1.jpg",'wb')

localPic.write(data.read())

localPic.close()

data.close()

输入用户名和密码 还有验证码后发送一个GET请求

这里面u代表账号  p代表密码 密码是经过一定算法加密的 verify是验证码

加密算法如下

[python] view plain copy

def PasswordSecret(self,password,v1,v2,md5=True):

if md5==True:

password=self.PCMd5(password).upper()

length=len(password)

temp=''

for i in range(0,length,2):

temp+=r'\x'+password[i:i+2]

return self.PCMd5(self.PCMd5(self.hex2asc(temp)+self.hex2asc(v2)).upper()+v1).upper()

#md5加密函数

def PCMd5(self,s):

h=hashlib.md5()

h.update(s)

return h.hexdigest()

#16进制转字符

def hex2asc(self,s):

_str="".join(s.split(r'\x'))

length=len(_str)

data=''

for i in range(0,length,2):

data+=chr(int(_str[i:i+2],16))

return data

然后是登录部分代码

[python] view plain copy

def Login(self,uin,pwd):

#获取参数

cheked=self.CheckVerify(uin)

#加密密码

#pwd=self.PasswordSecret(pwd,cheked[1],cheked[2])

#pwd=self.PasswordSecret(pwd,r'AAST',r'\x00\x00\x00\x00\x00\xa1\x92\x12')

loginurl="h&t=1&g=1&js_type=0&js_ver=10080&login_sig=YPD0P*wu2n8vW1OS2f7VfzvPf3Ku5vnkP4nzImF0GybR02fsKZdjGYB7f9R7nQRn&pt_uistyle=5"

loginurl=loginurl.replace('{uin}',uin)

#loginurl=loginurl.replace('{pwd}',pwd)

#loginurl=loginurl.replace('{verify}',cheked[1])

#result=Get(loginurl)

if(cheked[0]=="1"):

#下载验证码

self.GetVerify()

image = Image.open(r"c:/verify/1.jpg")

image.show()

code=raw_input("verifycode:").strip()

loginurl=loginurl.replace('{verify}',code.upper())

pwd=self.PasswordSecret(pwd,r''+code.upper(),cheked[2])

#pwd=self.PasswordSecret(pwd,cheked[1],cheked[2])

else:

loginurl=loginurl.replace('{verify}',cheked[1])

pwd=self.PasswordSecret(pwd,cheked[1],cheked[2])

loginurl=loginurl.replace('{pwd}',pwd)

result=self.Get(loginurl,'ssl.ptlogin2.qq.com','hin2.qq.com/cgi-bin/login?daid=164&target=self&style=5&mibao_css=m_webqq&appid=1003903&enable_qlogin=0&no_verifyimg=1&s_urlm%2Floginproxy.html&f_url=loginerroralert&strong_login=1&login_state=10&t=20140514001',None)

print 'Step2: Login'

pattern=re.compile("ptuiCB′(.∗)′,′(.∗)′,′(.∗)′,′(.∗)′,′(.∗)′,\s′(.∗)′;")

ret= pattern.search(result).groups()

#获取必要的cookie 否则第二次登陆会出错

self.Get(ret[2])

print 'Step3: GetCookie'

for c in self.cj:

if c.name=="ptwebqq":

self.ptwebqq=c.value

return result

登录成功后服务器会返回一串json数据

ptuiCB('0','0','ebqq_type%3D10&f_url=&ptlang=2052&ptredirect=100&aid=1003903&daid=164&j_later=0&low_login_hour=0&regmaster=0&pt_login_type=1&pt_aid=0&pt_aaid=0&pt_light=0','0','登录成功!', '小竹');

第一个为0 就表示登录成功了 ,但是这并没有真正的登录成功

上面的返回值中的url是用来获取一个关键cookie的 那就是ptwebqq

然后进行第二次登录,这次才是真正的登录

请求如下

Accept:*/*

Accept-Encoding:gzip,deflate,sdch

Accept-Language:zh-CN,zh;q=0.8

Connection:keep-alive

Content-Length:244

Content-Type:application/x-www-form-urlencoded

Cookie:o_cookie=455910092; RK=fMEaWEZ0Qc; ts_last=web2.qq.com/; ts_refer=www.baidu.com/; ts_uid=4588821804; pgv_pvid=914251705; pgv_info=ssid=s3525422600&pgvReferrer=; verifysession=h02LeYrtarkWBZeSu_czkiczeNSNlDm7V1mCm-A5qatkwnHaNfgb2z46zH4X7OfyhFT7wH6LfschPvSLhDGXFA4eA**; ptui_loginuin=10588690; ptisp=cnc; ptcz=dace9cf90e7064a16ee56c8153273eff9f2de1d2827ba31f6571412ac18c50c3; ptwebqq=b21232ed3519839063d1c2ead8a8588c385d168097efdf88bc56e1a78be7dfb4; pt2gguin=o0010588690; uin=o0010588690; skey=@gmEO6N2JD; p_uin=o0010588690; p_skey=cZ5*kS-NOcXlD2Q0AEpJnmExwC2yA0g7jbTygpVFiA8_; pt4_token=1SyuJ39Eq6oKEwEhGIizeg__

Host:d.web2.qq.com

Origin:h

Referer:htttml?v=20110331002&callback=1&id=2

User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36

Form Dataview sourceview URL encoded

r:{"status":"online","ptwebqq":"b21232ed3519839063d1c2ead8a8588c385d168097efdf88bc56e1a78be7dfb4","passwd_sig":"","clientid":"7963288","psessionid":null}

clientid:7963288

psessionid:null

其中的ptwebqq就是刚才我们从cookie中获取的

这部分代码是

[python] view plain copy

def Login2(self):

try:

url="htel/login2"

postdata="r=%7B%22status%22%3A%22online%22%2C%22ptwebqq%22%3A%22{$ptwebqq}%22%2C%22passwd_sig%22%3A%22%22%2C%22clientid%22%3A%22{$clientid}%22%2C%22psessionid%22%3Anull%7D&clientid={$clientid}&psessionid=null"

postdata=postdata.replace("{$ptwebqq}",self.ptwebqq)

postdata=postdata.replace("{$clientid}",str(self.clientid))

print 'Step4: Login2'

result=self.Post(url,postdata,QQRobot.HOST[0],QQRobot.REFERER[0],QQRobot.ORIGIN[0])

retjson=json.loads(result)

retjson=retjson["result"]

return retjson

except Exception,e:

print "Login2 error "+str(e)

第二次登陆成功后会返回一个

'''{"retcode":0,

"result":{

"uin":10588690,

"cip":1707901841,

"index":1075,

"port":59571,

"status":"online",

"vfwebqq":"c043f1f6ce5c3b76a4603ab60082668bef2dde0b987808f728e2071eb7c164eeb30fcd85c31018d2",

"psessionid":"8368046764001d636f6e6e7365727665725f77656271714031302e3133392e372e31363000006cb000001ae1036200a192126d0000000a40356c593742635175316d00000028c043f1f6ce5c3b76a4603ab60082668bef2dde0b987808f728e2071eb7c164eeb30fcd85c31018d2",

"user_state":0,

"f":0

}

}'''

这样的数据结构  其中0表示登陆成功

需要把这写数据保存下来 后面进行操作需要

登陆成功后我们就可以拉去群列表了

[python] view plain copy

#获取群列表信息

def GetGroupNameList(self,vfwebqq):

try:

url="h/get_group_name_list_mask2"

postdata="r=%7B%22vfwebqq%22%3A%22{$vfwebqq}%22%7D"

postdata=postdata.replace("{$vfwebqq}",vfwebqq)

ret=self.Post(url,postdata,QQRobot.HOST[1],QQRobot.REFERER[1],QQRobot.ORIGIN[1])

print 'Step5: GetGroupList'

retjson=json.loads(ret)

retjson=retjson["result"]

self.grouplist=retjson

for group in self.grouplist['gnamelist']:

print group["code"],group["name"]

except Exception,e:

python怎么打开qq_如何用python登陆qq读取信息相关推荐

  1. python自动打开_如何用Python自动打开和关闭Tor浏览器

    我在玩网页抓取和Tor.在 我设法让它同时使用requests和{}+PhantomJS.但是,我需要打开Tor浏览器才能使脚本工作.在 这就是为什么我现在试图自动化整个过程:也就是说:自动打开Tor ...

  2. 用python开启相机_如何用Python打开realsenseD435相机并获取相机参数

    如何用Python打开realsenseD435相机 import pyrealsense2 as rs import numpy as np import cv2 if __name__ == &q ...

  3. python最小化打开exe_如何用python使GoAgent窗口打开后自动最小化以及关闭之前的py.exe窗口...

    python:3.4 goagent:3.1.22-33 写了一个想在ipv4/6之间切换的小脚本 path=r'D:\Documents\Downloads\Downloads\goagent-go ...

  4. python怎么读_如何用Python读写文件

    前面我们已经介绍了很多Python相关的基础知识,大家是不是对Python已经有了进一步认识了呢?作为人工智能时代的热门编程语言,开始接触并学习Python的孩子越来越多,家长们都不想让自己的孩子落于 ...

  5. python大数据分析实例-如何用Python分析大数据(以Twitter数据挖掘为例)

    原标题:如何用Python分析大数据(以Twitter数据挖掘为例) 来源:艾翻译(http://www.itran.cc/) 原文标题:Twitter Data Mining: A Guide to ...

  6. python与excel表格-如何用python处理excel表格

    openpyxl是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装. 读取Excel文件 需要导入相关函数 from openpyxl import l ...

  7. 怎么用python处理excel文件-如何用python处理excel表格

    openpyxl是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装. 读取Excel文件 需要导入相关函数 from openpyxl import l ...

  8. 2019最新Python学习路线图:如何用Python创建微信机器人

    微信,一个日活10亿的超级app,不仅在国内社交独领风骚,在国外社交也同样占有一席之地.今天我们要讲的最新Python学习路线教程便是如何用Python来做一个微信聊天机器人,突然想起鲁迅先生曾经说过 ...

  9. python处理excel表格-如何用python处理excel表格

    openpyxl是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装. 读取Excel文件 需要导入相关函数 from openpyxl import l ...

最新文章

  1. 英伟达十年力作:新一代光线追踪显卡 Quadro RTX及核心架构Turing,可支持AI运算...
  2. 兰大本科生发31篇论文遭质疑,本人及校方回应!
  3. nginx 学习笔记(1) nginx安装
  4. [云炬创业管理笔记]第二章测试6
  5. rror Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that
  6. 运行时间_运行一段时间报高压保护
  7. 记录一次HBase的scan的分页查询
  8. C++之运算符重载(下)
  9. Hadoop 命令操作
  10. Python数据可视化实战——iris数据集可视化
  11. 常规对数据库库的操作
  12. 树莓派4B引脚定义及运行实例
  13. 我想把生活折腾成自己想要的样子
  14. 复习jquery菜鸟教程
  15. 一个程序员的自白(认同迷失)
  16. 7-24 到底是不是太胖了 (10分)
  17. 学习永无止境——小白的自述
  18. 【poj 3069】萨鲁曼的大军
  19. android客户端和服务端交互,谈谈android客户端和网站数据交互的实现
  20. 初识Struts2框架

热门文章

  1. VSCode 2008 无法Debug 解决办法
  2. 递归与递归算法实例(java实现)
  3. 西北工业大学c语言程序设计试题,西北工业大学15春《C语言程序设计》在线作业答案...
  4. NXP iMX8M Plus M7核心FreeRTOS开发
  5. nginx工作原理和实现高并发请求的原因
  6. 微信小程序——日常踩坑(wx.pageScrollTo滚动时有抖动问题)
  7. 免费的开源linux连接工具MobaXterm分享
  8. Laravel5.6 migrate时报错 SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too
  9. ABeam News | 南昌大学拜访ABeam旗下德硕管理咨询(深圳),校企合作互利共赢
  10. 游戏学院培训 成就高薪梦想