首页 > 微信应用  > 

微信开发之如何用脚本查看是否被微信好友删除

微信开发之如何用脚本查看是否被微信好友删除
这篇文章主要介绍了微信 用脚本查看是否被微信好友删除的相关资料,需要的朋友可以参考下

这篇文章主要介绍了微信  用脚本查看是否被微信好友删除的相关资料,需要的朋友可以参考下

某日,一同学给小的发了 Github 源码,说是可以轻松查到删除自己的微信好友,于是就开始了作死之路。

Github 源码请看:0x5e/wechat-deleted-friends

前言

相信各位一定有收到过这样的群发短信,据说还被归类为玩转微信的五大技巧之一╮(╯▽╰)╭但,其实,只要跑一下脚本,就轻松找出删除自己的好友(轻松摔碎玻璃心,逃

GitHub:开源怪我咯?

原理

新建群组,如果加不进来就是被删好友了(不要在群组里讲话,别人是看不见的)。

用的是微信网页版的接口,还有些小问题,不过现在结果好像有疏漏一小部分,原因不明……也没试过被拉黑的情况。最终会遗留下一个只有自己的群组,需要手工删一下。

方法

下载 python 脚本,跑一下。启动 Terminal,切到文件目录下:

python wdf.py

代码如下

#!/usr/bin/env python# coding=utf-8import osimport urllib, urllib2import reimport cookielibimport timeimport xml.dom.minidomimport jsonimport sysimport mathDEBUG = FalseMAX_GROUP_NUM = 35 # 每组人数QRImagePath = os.getcwd() + &#39;/qrcode.jpg&#39;tip = 0uuid = &#39;&#39;base_uri = &#39;&#39;redirect_uri = &#39;&#39;skey = &#39;&#39;wxsid = &#39;&#39;wxuin = &#39;&#39;pass_ticket = &#39;&#39;deviceId = &#39;e000000000000000&#39;BaseRequest = {}ContactList = []My = []def getUUID(): global uuid url = &#39;https://login.weixin.qq.com/jslogin&#39; params = { &#39;appid&#39;: &#39;wx782c26e4c19acffb&#39;, &#39;fun&#39;: &#39;new&#39;, &#39;lang&#39;: &#39;zh_CN&#39;, &#39;_&#39;: int(time.time()), } request = urllib2.Request(url = url, data = urllib.urlencode(params)) response = urllib2.urlopen(request) data = response.read() # print data # window.QRLogin.code = 200; window.QRLogin.uuid = "oZwt_bFfRg=="; regx = r&#39;window.QRLogin.code = (\d+); window.QRLogin.uuid = "(\S+?)"&#39; pm = re.search(regx, data) code = pm.group(1) uuid = pm.group(2) if code == &#39;200&#39;: return True return Falsedef showQRImage(): global tip url = &#39;https://login.weixin.qq.com/qrcode/&#39; + uuid params = { &#39;t&#39;: &#39;webwx&#39;, &#39;_&#39;: int(time.time()), } request = urllib2.Request(url = url, data = urllib.urlencode(params)) response = urllib2.urlopen(request) tip = 1 f = open(QRImagePath, &#39;wb&#39;) f.write(response.read()) f.close() if sys.platform.find(&#39;darwin&#39;) >= 0: os.system(&#39;open %s&#39; % QRImagePath) elif sys.platform.find(&#39;linux&#39;) >= 0: os.system(&#39;xdg-open %s&#39; % QRImagePath) else: os.system(&#39;call %s&#39; % QRImagePath) print &#39;请使用微信扫描二维码以登录&#39;def waitForLogin(): global tip, base_uri, redirect_uri url = &#39;https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?tip=%s&uuid=%s&_=%s&#39; % (tip, uuid, int(time.time())) request = urllib2.Request(url = url) response = urllib2.urlopen(request) data = response.read() # print data # window.code=500; regx = r&#39;window.code=(\d+);&#39; pm = re.search(regx, data) code = pm.group(1) if code == &#39;201&#39;: #已扫描 print &#39;成功扫描,请在手机上点击确认以登录&#39; tip = 0 elif code == &#39;200&#39;: #已登录 print &#39;正在登录...&#39; regx = r&#39;window.redirect_uri="(\S+?)";&#39; pm = re.search(regx, data) redirect_uri = pm.group(1) + &#39;&fun=new&#39; base_uri = redirect_uri[:redirect_uri.rfind(&#39;/&#39;)] elif code == &#39;408&#39;: #超时 pass # elif code == &#39;400&#39; or code == &#39;500&#39;: return codedef login(): global skey, wxsid, wxuin, pass_ticket, BaseRequest request = urllib2.Request(url = redirect_uri) response = urllib2.urlopen(request) data = response.read() # print data &#39;&#39;&#39; <error> <ret>0</ret> <message>OK</message> <skey>xxx</skey> <wxsid>xxx</wxsid> <wxuin>xxx</wxuin> <pass_ticket>xxx</pass_ticket> <isgrayscale>1</isgrayscale> </error> &#39;&#39;&#39; doc = xml.dom.minidom.parseString(data) root = doc.documentElement for node in root.childNodes: if node.nodeName == &#39;skey&#39;: skey = node.childNodes[0].data elif node.nodeName == &#39;wxsid&#39;: wxsid = node.childNodes[0].data elif node.nodeName == &#39;wxuin&#39;: wxuin = node.childNodes[0].data elif node.nodeName == &#39;pass_ticket&#39;: pass_ticket = node.childNodes[0].data # print &#39;skey: %s, wxsid: %s, wxuin: %s, pass_ticket: %s&#39; % (skey, wxsid, wxuin, pass_ticket) if skey == &#39;&#39; or wxsid == &#39;&#39; or wxuin == &#39;&#39; or pass_ticket == &#39;&#39;: return False BaseRequest = { &#39;Uin&#39;: int(wxuin), &#39;Sid&#39;: wxsid, &#39;Skey&#39;: skey, &#39;DeviceID&#39;: deviceId, } return Truedef webwxinit(): url = base_uri + &#39;/webwxinit?pass_ticket=%s&skey=%s&r=%s&#39; % (pass_ticket, skey, int(time.time())) params = { &#39;BaseRequest&#39;: BaseRequest } request = urllib2.Request(url = url, data = json.dumps(params)) request.add_header(&#39;ContentType&#39;, &#39;application/json; charset=UTF-8&#39;) response = urllib2.urlopen(request) data = response.read() if DEBUG == True: f = open(os.getcwd() + &#39;/webwxinit.json&#39;, &#39;wb&#39;) f.write(data) f.close() # print data global ContactList, My dic = json.loads(data) ContactList = dic[&#39;ContactList&#39;] My = dic[&#39;User&#39;] ErrMsg = dic[&#39;BaseResponse&#39;][&#39;ErrMsg&#39;] if len(ErrMsg) > 0: print ErrMsg Ret = dic[&#39;BaseResponse&#39;][&#39;Ret&#39;] if Ret != 0: return False return Truedef webwxgetcontact(): url = base_uri + &#39;/webwxgetcontact?pass_ticket=%s&skey=%s&r=%s&#39; % (pass_ticket, skey, int(time.time())) request = urllib2.Request(url = url) request.add_header(&#39;ContentType&#39;, &#39;application/json; charset=UTF-8&#39;) response = urllib2.urlopen(request) data = response.read() if DEBUG == True: f = open(os.getcwd() + &#39;/webwxgetcontact.json&#39;, &#39;wb&#39;) f.write(data) f.close() # print data dic = json.loads(data) MemberList = dic[&#39;MemberList&#39;] # 倒序遍历,不然删除的时候出问题.. SpecialUsers = [&#39;newsapp&#39;, &#39;fmessage&#39;, &#39;filehelper&#39;, &#39;weibo&#39;, &#39;qqmail&#39;, &#39;fmessage&#39;, &#39;tmessage&#39;, &#39;qmessage&#39;, &#39;qqsync&#39;, &#39;floatbottle&#39;, &#39;lbsapp&#39;, &#39;shakeapp&#39;, &#39;medianote&#39;, &#39;qqfriend&#39;, &#39;readerapp&#39;, &#39;blogapp&#39;, &#39;facebookapp&#39;, &#39;masssendapp&#39;, &#39;meishiapp&#39;, &#39;feedsapp&#39;, &#39;voip&#39;, &#39;blogappweixin&#39;, &#39;weixin&#39;, &#39;brandsessionholder&#39;, &#39;weixinreminder&#39;, &#39;wxid_novlwrv3lqwv11&#39;, &#39;gh_22b87fa7cb3c&#39;, &#39;officialaccounts&#39;, &#39;notification_messages&#39;, &#39;wxid_novlwrv3lqwv11&#39;, &#39;gh_22b87fa7cb3c&#39;, &#39;wxitil&#39;, &#39;userexperience_alarm&#39;, &#39;notification_messages&#39;] for i in xrange(len(MemberList) - 1, -1, -1): Member = MemberList[i] if Member[&#39;VerifyFlag&#39;] & 8 != 0: # 公众号/服务号 MemberList.remove(Member) elif Member[&#39;UserName&#39;] in SpecialUsers: # 特殊账号 MemberList.remove(Member) elif Member[&#39;UserName&#39;].find(&#39;@@&#39;) != -1: # 群聊 MemberList.remove(Member) elif Member[&#39;UserName&#39;] == My[&#39;UserName&#39;]: # 自己 MemberList.remove(Member) return MemberListdef createChatroom(UserNames): MemberList = [] for UserName in UserNames: MemberList.append({&#39;UserName&#39;: UserName}) url = base_uri + &#39;/webwxcreatechatroom?pass_ticket=%s&r=%s&#39; % (pass_ticket, int(time.time())) params = { &#39;BaseRequest&#39;: BaseRequest, &#39;MemberCount&#39;: len(MemberList), &#39;MemberList&#39;: MemberList, &#39;Topic&#39;: &#39;&#39;, } request = urllib2.Request(url = url, data = json.dumps(params)) request.add_header(&#39;ContentType&#39;, &#39;application/json; charset=UTF-8&#39;) response = urllib2.urlopen(request) data = response.read() # print data dic = json.loads(data) ChatRoomName = dic[&#39;ChatRoomName&#39;] MemberList = dic[&#39;MemberList&#39;] DeletedList = [] for Member in MemberList: if Member[&#39;MemberStatus&#39;] == 4: #被对方删除了 DeletedList.append(Member[&#39;UserName&#39;]) ErrMsg = dic[&#39;BaseResponse&#39;][&#39;ErrMsg&#39;] if len(ErrMsg) > 0: print ErrMsg return (ChatRoomName, DeletedList)def deleteMember(ChatRoomName, UserNames): url = base_uri + &#39;/webwxupdatechatroom?fun=delmember&pass_ticket=%s&#39; % (pass_ticket) params = { &#39;BaseRequest&#39;: BaseRequest, &#39;ChatRoomName&#39;: ChatRoomName, &#39;DelMemberList&#39;: &#39;,&#39;.join(UserNames), } request = urllib2.Request(url = url, data = json.dumps(params)) request.add_header(&#39;ContentType&#39;, &#39;application/json; charset=UTF-8&#39;) response = urllib2.urlopen(request) data = response.read() # print data dic = json.loads(data) ErrMsg = dic[&#39;BaseResponse&#39;][&#39;ErrMsg&#39;] if len(ErrMsg) > 0: print ErrMsg Ret = dic[&#39;BaseResponse&#39;][&#39;Ret&#39;] if Ret != 0: return False return Truedef addMember(ChatRoomName, UserNames): url = base_uri + &#39;/webwxupdatechatroom?fun=addmember&pass_ticket=%s&#39; % (pass_ticket) params = { &#39;BaseRequest&#39;: BaseRequest, &#39;ChatRoomName&#39;: ChatRoomName, &#39;AddMemberList&#39;: &#39;,&#39;.join(UserNames), } request = urllib2.Request(url = url, data = json.dumps(params)) request.add_header(&#39;ContentType&#39;, &#39;application/json; charset=UTF-8&#39;) response = urllib2.urlopen(request) data = response.read() # print data dic = json.loads(data) MemberList = dic[&#39;MemberList&#39;] DeletedList = [] for Member in MemberList: if Member[&#39;MemberStatus&#39;] == 4: #被对方删除了 DeletedList.append(Member[&#39;UserName&#39;]) ErrMsg = dic[&#39;BaseResponse&#39;][&#39;ErrMsg&#39;] if len(ErrMsg) > 0: print ErrMsg return DeletedListdef main(): opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar())) urllib2.install_opener(opener) if getUUID() == False: print &#39;获取uuid失败&#39; return showQRImage() time.sleep(1) while waitForLogin() != &#39;200&#39;: pass os.remove(QRImagePath) if login() == False: print &#39;登录失败&#39; return if webwxinit() == False: print &#39;初始化失败&#39; return MemberList = webwxgetcontact() MemberCount = len(MemberList) print &#39;通讯录共%s位好友&#39; % MemberCount ChatRoomName = &#39;&#39; result = [] for i in xrange(0, int(math.ceil(MemberCount / float(MAX_GROUP_NUM)))): UserNames = [] NickNames = [] DeletedList = &#39;&#39; for j in xrange(0, MAX_GROUP_NUM): if i * MAX_GROUP_NUM + j >= MemberCount: break Member = MemberList[i * MAX_GROUP_NUM + j] UserNames.append(Member[&#39;UserName&#39;]) NickNames.append(Member[&#39;NickName&#39;].encode(&#39;utf-8&#39;)) print &#39;第%s组...&#39; % (i + 1) print &#39;, &#39;.join(NickNames) print &#39;回车键继续...&#39; raw_input() # 新建群组/添加成员 if ChatRoomName == &#39;&#39;: (ChatRoomName, DeletedList) = createChatroom(UserNames) else: DeletedList = addMember(ChatRoomName, UserNames) DeletedCount = len(DeletedList) if DeletedCount > 0: result += DeletedList print &#39;找到%s个被删好友&#39; % DeletedCount # raw_input() # 删除成员 deleteMember(ChatRoomName, UserNames) # todo 删除群组 resultNames = [] for Member in MemberList: if Member[&#39;UserName&#39;] in result: NickName = Member[&#39;NickName&#39;] if Member[&#39;RemarkName&#39;] != &#39;&#39;: NickName += &#39;(%s)&#39; % Member[&#39;RemarkName&#39;] resultNames.append(NickName.encode(&#39;utf-8&#39;)) print &#39;---------- 被删除的好友列表 ----------&#39; print &#39;\n&#39;.join(resultNames) print &#39;-----------------------------------&#39;# windows下编码问题修复# http://www.php.cn/class UnicodeStreamFilter: def __init__(self, target): self.target = target self.encoding = &#39;utf-8&#39; self.errors = &#39;replace&#39; self.encode_to = self.target.encoding def write(self, s): if type(s) == str: s = s.decode(&#39;utf-8&#39;) s = s.encode(self.encode_to, self.errors).decode(self.encode_to) self.target.write(s) if sys.stdout.encoding == &#39;cp936&#39;: sys.stdout = UnicodeStreamFilter(sys.stdout)if __name__ == &#39;__main__&#39; : print &#39;本程序的查询结果可能会引起一些心理上的不适,请小心使用...&#39; print &#39;回车键继续...&#39; raw_input() main() print &#39;回车键结束&#39; raw_input()

微信开发之如何用脚本查看是否被微信好友删除由讯客互联微信应用栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“微信开发之如何用脚本查看是否被微信好友删除