python 获取微信好友列表的方法(微信web)


Posted in Python onFebruary 21, 2019

如下所示:

import urllib
import urllib2 
import os
import time
import re 
import cookielib 
import xml.dom.minidom 
import json
 
tip = 0 
uuid = ''
successUrl = ''
skey = ''
wxsid = ''
wxuin = ''
pass_ticket = ''
deviceId = 'e000000000000000'
imagesPath = os.getcwd() + '/weixin.jpg'
 
BaseRequest = {}
base_uri = '' 
push_uri = ''
 
def getUUID():
  global uuid
  url = 'https://login.weixin.qq.com/jslogin'
  values = { 
    'appid':'wx782c26e4c19acffb',
    'redirect_uri':'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage',
    'fun':'new',
    'lang':'zh_CN',
    '_':int(time.time())
  } 
  request = urllib2.Request(url=url, data=urllib.urlencode(values))  
  response = urllib2.urlopen(request)
  data = response.read() 
  print data 
   
  regx = r'window.QRLogin.code = (\d+); window.QRLogin.uuid = "(\S+?)"' 
  pm = re.search(regx, data) 
  code = pm.group(1) 
  uuid = pm.group(2) 
  print code, uuid 
   
  if code == '200': 
    return True 
  return False 
 
def show2DimensionCode(): 
  global tip
 
  url = 'https://login.weixin.qq.com/qrcode/' + uuid 
  values = { 
    't':'webwx',
    '_':int(time.time()) 
  } 
 
  request = urllib2.Request(url=url, data=urllib.urlencode(values)) 
  response = urllib2.urlopen(request) 
  tip = 1 
 
  f = open(imagesPath, 'wb') 
  f.write(response.read()) 
  f.close() 
  time.sleep(1)
  os.system('call %s' % imagesPath) 
  print u'please sacn qcode by your phone'.encode('GBK') 
  
def isLoginSucess():
  global successUrl, base_uri, push_uri
  
  url = 'https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?tip=%s&uuid=%s&_=%s' % (tip, uuid, int(time.time())) 
  request = urllib2.Request(url=url) 
  response = urllib2.urlopen(request) 
  data = response.read() 
  print data 
  regx = r'window.code=(\d+)'
  regxLogin = r'window.redirect_uri="(\S+?)"' 
  pm = re.search(regx, data) 
  pmLogin = re.search(regxLogin, data)
  code = pm.group(1)
  if pmLogin != None:
   successUrl = pmLogin.group(1) + '&fun=new&version=v2'
 
  if code == '201': 
    print'Scan QR code successfully!' 
  elif code == '200': 
    print'Logining...' 
    services = [ 
     ('wx2.qq.com', 'webpush2.weixin.qq.com'), 
     ('qq.com', 'webpush.weixin.qq.com'), 
     ('web1.wechat.com', 'webpush1.wechat.com'), 
     ('web2.wechat.com', 'webpush2.wechat.com'), 
     ('wechat.com', 'webpush.wechat.com'), 
     ('web1.wechatapp.com', 'webpush1.wechatapp.com'), 
    ] 
    base_uri = successUrl[:successUrl.rfind('/')] 
    push_uri = base_uri 
    for (searchUrl, pushUrl) in services: 
     if base_uri.find(searchUrl) >= 0: 
      push_uri = 'https://%s/cgi-bin/mmwebwx-bin' % pushUrl 
      break 
  elif code == '408': 
    print'Login Timeout!'
 
  return code  
 
def webwxnewloginpage():
 global successUrl, skey, wxsid, wxuin, pass_ticket, BaseRequest
 
 request = urllib2.Request(url=successUrl) 
 response = urllib2.urlopen(request) 
 data = response.read()
 
 doc = xml.dom.minidom.parseString(data) 
 root = doc.documentElement 
 
 for node in root.childNodes: 
  if node.nodeName == 'skey': 
   skey = node.childNodes[0].data 
  elif node.nodeName == 'wxsid': 
   wxsid = node.childNodes[0].data 
  elif node.nodeName == 'wxuin': 
   wxuin = node.childNodes[0].data 
  elif node.nodeName == 'pass_ticket': 
   pass_ticket = node.childNodes[0].data
   
 BaseRequest = { 
  'Uin': wxuin, 
  'Sid': wxsid, 
  'Skey': skey, 
  'DeviceID': deviceId, 
 }
 
def webwxinit(): 
 global skey, pass_ticket, BaseRequest, base_uri
 
 url = (base_uri + '/webwxinit?pass_ticket=%s&skey=%s&r=%s' % (pass_ticket, skey, int(time.time()))) 
 params = {'BaseRequest': BaseRequest} 
 headers = {'content-type': 'application/json; charset=UTF-8'}
 request = urllib2.Request(url=url, data=json.dumps(params), headers=headers) 
 response = urllib2.urlopen(request) 
 data = response.read()
 print data
 
def webwxgetcontact(): 
 global skey, pass_ticket, base_uri
  
 url = (base_uri + '/webwxgetcontact?pass_ticket=%s&skey=%s&r=%s' % (pass_ticket, skey, int(time.time()))) 
 headers = {'content-type': 'application/json; charset=UTF-8'}
 request = urllib2.Request(url=url, headers=headers) 
 response = urllib2.urlopen(request)
 data = response.read()
 print data
 
def main(): 
 
  cookie = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar())) 
  urllib2.install_opener(cookie) 
 
  if getUUID() == False: 
   print'Get uuid unsuccessfully!' 
   return None 
 
  show2DimensionCode() 
  time.sleep(1) 
 
  while isLoginSucess() != '200': 
   pass 
 
  webwxnewloginpage()
#   time.sleep(1)
#   webwxinit()
  time.sleep(1)
  webwxgetcontact()
  
  os.remove(imagesPath) 
  print'Login successfully!' 
 
if __name__ == '__main__': 
  print'Welcome to use weixin personnal version' 
  print'Please click Enter key to continue......'
  main()

以上这篇python 获取微信好友列表的方法(微信web)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中表示字符串的三种方法
Sep 06 Python
Tornado高并发处理方法实例代码
Jan 15 Python
python单例模式实例解析
Aug 28 Python
浅谈python下含中文字符串正则表达式的编码问题
Dec 07 Python
Python爬虫实现验证码登录代码实例
May 10 Python
python pyenv多版本管理工具的使用
Dec 23 Python
Python 将json序列化后的字符串转换成字典(推荐)
Jan 06 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
TensorFlow实现自定义Op方式
Feb 04 Python
用Python绘制漫步图实例讲解
Feb 26 Python
用Python远程登陆服务器的步骤
Apr 16 Python
用Python可视化新冠疫情数据
Jan 18 Python
Python基于mysql实现学生管理系统
Feb 21 #Python
python+mysql实现教务管理系统
Feb 20 #Python
python Tkinter版学生管理系统
Feb 20 #Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
Feb 20 #Python
Python实战购物车项目的实现参考
Feb 20 #Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
Feb 20 #Python
python3+pyqt5+itchat微信定时发送消息的方法
Feb 20 #Python
You might like
收音机指标测试方法及仪器
2021/03/01 无线电
php中把美国时间转为北京时间的自定义函数分享
2014/07/28 PHP
PHP微信公众号自动发送红包API
2016/06/01 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
通过实例解析PHP数据类型转换方法
2020/07/11 PHP
JavaScript 格式字符串的应用
2010/03/29 Javascript
JS对文本框值的判断示例
2014/03/10 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
简单实现js选项卡切换效果
2016/02/03 Javascript
jQuery EasyUi 验证功能实例解析
2017/01/06 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
VueRouter导航守卫用法详解
2017/12/25 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
python 图片验证码代码
2008/12/07 Python
Python编程之event对象的用法实例分析
2017/03/23 Python
Python学习入门之区块链详解
2017/07/25 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
详解Python读取yaml文件多层菜单
2019/03/23 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
numpy linalg模块的具体使用方法
2019/05/26 Python
pycharm创建scrapy项目教程及遇到的坑解析
2019/08/15 Python
Python高级特性——详解多维数组切片(Slice)
2019/11/26 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
2012/12/07 HTML / CSS
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
创造美妙香氛体验:Aera扩散器和香水
2018/11/25 全球购物
排查整治工作方案
2014/06/09 职场文书
经济国贸专业求职信
2014/06/18 职场文书
2014年小学数学工作总结
2014/12/12 职场文书
评先进个人材料
2014/12/29 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技