- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python轻松查到删除自己的微信好友由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
前言 。
相信各位一定有收到过这样的群发短信,据说还被归类为玩转微信的五大技巧之一╮(╯▽╰)╭但,其实,只要跑一下脚本,就轻松找出删除自己的好友(轻松摔碎玻璃心,逃 。
原理 。
新建群组,如果加不进来就是被删好友了(不要在群组里讲话,别人是看不见的)。 用的是微信网页版的接口,还有些小问题,不过现在结果好像有疏漏一小部分,原因不明……也没试过被拉黑的情况。最终会遗留下一个只有自己的群组,需要手工删一下.
方法 。
下载 python 脚本,跑一下。启动 Terminal,切到文件目录下:
python wdf.py 代码如下 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
|
#!/usr/bin/env python
# coding=utf-8
import
os
import
urllib, urllib2
import
re
import
cookielib
import
time
import
xml.dom.minidom
import
json
import
sys
import
math
DEBUG
=
False
MAX_GROUP_NUM
=
35
# 每组人数
QRImagePath
=
os.getcwd()
+
'/qrcode.jpg'
tip
=
0
uuid
=
''
base_uri
=
''
redirect_uri
=
''
skey
=
''
wxsid
=
''
wxuin
=
''
pass_ticket
=
''
deviceId
=
'e000000000000000'
BaseRequest
=
{}
ContactList
=
[]
My
=
[]
def
getUUID():
global
uuid
url
=
'https://login.weixin.qq.com/jslogin'
params
=
{
'appid'
:
'wx782c26e4c19acffb'
,
'fun'
:
'new'
,
'lang'
:
'zh_CN'
,
'_'
:
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
'window.QRLogin.code = (\d+); window.QRLogin.uuid = "(\S+?)"'
pm
=
re.search(regx, data)
code
=
pm.group(
1
)
uuid
=
pm.group(
2
)
if
code
=
=
'200'
:
return
True
return
False
def
showQRImage():
global
tip
url
=
'https://login.weixin.qq.com/qrcode/'
+
uuid
params
=
{
't'
:
'webwx'
,
'_'
:
int
(time.time()),
}
request
=
urllib2.Request(url
=
url, data
=
urllib.urlencode(params))
response
=
urllib2.urlopen(request)
tip
=
1
f
=
open
(QRImagePath,
'wb'
)
f.write(response.read())
f.close()
if
sys.platform.find(
'darwin'
) >
=
0
:
os.system(
'open %s'
%
QRImagePath)
elif
sys.platform.find(
'linux'
) >
=
0
:
os.system(
'xdg-open %s'
%
QRImagePath)
else
:
os.system(
'call %s'
%
QRImagePath)
print
'请使用微信扫描二维码以登录'
def
waitForLogin():
global
tip, base_uri, redirect_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
# window.code=500;
regx
=
r
'window.code=(\d+);'
pm
=
re.search(regx, data)
code
=
pm.group(
1
)
if
code
=
=
'201'
:
#已扫描
print
'成功扫描,请在手机上点击确认以登录'
tip
=
0
elif
code
=
=
'200'
:
#已登录
print
'正在登录...'
regx
=
r
'window.redirect_uri="(\S+?)";'
pm
=
re.search(regx, data)
redirect_uri
=
pm.group(
1
)
+
'&fun=new'
base_uri
=
redirect_uri[:redirect_uri.rfind(
'/'
)]
elif
code
=
=
'408'
:
#超时
pass
# elif code == '400' or code == '500':
return
code
def
login():
global
skey, wxsid, wxuin, pass_ticket, BaseRequest
request
=
urllib2.Request(url
=
redirect_uri)
response
=
urllib2.urlopen(request)
data
=
response.read()
# print data
'''
<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>
'''
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
# print 'skey: %s, wxsid: %s, wxuin: %s, pass_ticket: %s' % (skey, wxsid, wxuin, pass_ticket)
if
skey
=
=
'
' or wxsid == '
' or wxuin == '
' or pass_ticket == '
':
return
False
BaseRequest
=
{
'Uin'
:
int
(wxuin),
'Sid'
: wxsid,
'Skey'
: skey,
'DeviceID'
: deviceId,
}
return
True
def
webwxinit():
url
=
base_uri
+
'/webwxinit?pass_ticket=%s&skey=%s&r=%s'
%
(pass_ticket, skey,
int
(time.time()))
params
=
{
'BaseRequest'
: BaseRequest
}
request
=
urllib2.Request(url
=
url, data
=
json.dumps(params))
request.add_header(
'ContentType'
,
'application/json; charset=UTF-8'
)
response
=
urllib2.urlopen(request)
data
=
response.read()
if
DEBUG
=
=
True
:
f
=
open
(os.getcwd()
+
'/webwxinit.json'
,
'wb'
)
f.write(data)
f.close()
# print data
global
ContactList, My
dic
=
json.loads(data)
ContactList
=
dic[
'ContactList'
]
My
=
dic[
'User'
]
ErrMsg
=
dic[
'BaseResponse'
][
'ErrMsg'
]
if
len
(ErrMsg) >
0
:
print
ErrMsg
Ret
=
dic[
'BaseResponse'
][
'Ret'
]
if
Ret !
=
0
:
return
False
return
True
def
webwxgetcontact():
url
=
base_uri
+
'/webwxgetcontact?pass_ticket=%s&skey=%s&r=%s'
%
(pass_ticket, skey,
int
(time.time()))
request
=
urllib2.Request(url
=
url)
request.add_header(
'ContentType'
,
'application/json; charset=UTF-8'
)
response
=
urllib2.urlopen(request)
data
=
response.read()
if
DEBUG
=
=
True
:
f
=
open
(os.getcwd()
+
'/webwxgetcontact.json'
,
'wb'
)
f.write(data)
f.close()
# print data
dic
=
json.loads(data)
MemberList
=
dic[
'MemberList'
]
# 倒序遍历,不然删除的时候出问题..
SpecialUsers
=
[
'newsapp'
,
'fmessage'
,
'filehelper'
,
'weibo'
,
'qqmail'
,
'fmessage'
,
'tmessage'
,
'qmessage'
,
'qqsync'
,
'floatbottle'
,
'lbsapp'
,
'shakeapp'
,
'medianote'
,
'qqfriend'
,
'readerapp'
,
'blogapp'
,
'facebookapp'
,
'masssendapp'
,
'meishiapp'
,
'feedsapp'
,
'voip'
,
'blogappweixin'
,
'weixin'
,
'brandsessionholder'
,
'weixinreminder'
,
'wxid_novlwrv3lqwv11'
,
'gh_22b87fa7cb3c'
,
'officialaccounts'
,
'notification_messages'
,
'wxid_novlwrv3lqwv11'
,
'gh_22b87fa7cb3c'
,
'wxitil'
,
'userexperience_alarm'
,
'notification_messages'
]
for
i
in
xrange
(
len
(MemberList)
-
1
,
-
1
,
-
1
):
Member
=
MemberList[i]
if
Member[
'VerifyFlag'
] &
8
!
=
0
:
# 公众号/服务号
MemberList.remove(Member)
elif
Member[
'UserName'
]
in
SpecialUsers:
# 特殊账号
MemberList.remove(Member)
elif
Member[
'UserName'
].find(
'@@'
) !
=
-
1
:
# 群聊
MemberList.remove(Member)
elif
Member[
'UserName'
]
=
=
My[
'UserName'
]:
# 自己
MemberList.remove(Member)
return
MemberList
def
createChatroom(UserNames):
MemberList
=
[]
for
UserName
in
UserNames:
MemberList.append({
'UserName'
: UserName})
url
=
base_uri
+
'/webwxcreatechatroom?pass_ticket=%s&r=%s'
%
(pass_ticket,
int
(time.time()))
params
=
{
'BaseRequest'
: BaseRequest,
'MemberCount'
:
len
(MemberList),
'MemberList'
: MemberList,
'Topic'
: '',
}
request
=
urllib2.Request(url
=
url, data
=
json.dumps(params))
request.add_header(
'ContentType'
,
'application/json; charset=UTF-8'
)
response
=
urllib2.urlopen(request)
data
=
response.read()
# print data
dic
=
json.loads(data)
ChatRoomName
=
dic[
'ChatRoomName'
]
MemberList
=
dic[
'MemberList'
]
DeletedList
=
[]
for
Member
in
MemberList:
if
Member[
'MemberStatus'
]
=
=
4
:
#被对方删除了
DeletedList.append(Member[
'UserName'
])
ErrMsg
=
dic[
'BaseResponse'
][
'ErrMsg'
]
if
len
(ErrMsg) >
0
:
print
ErrMsg
return
(ChatRoomName, DeletedList)
def
deleteMember(ChatRoomName, UserNames):
url
=
base_uri
+
'/webwxupdatechatroom?fun=delmember&pass_ticket=%s'
%
(pass_ticket)
params
=
{
'BaseRequest'
: BaseRequest,
'ChatRoomName'
: ChatRoomName,
'DelMemberList'
:
','
.join(UserNames),
}
request
=
urllib2.Request(url
=
url, data
=
json.dumps(params))
request.add_header(
'ContentType'
,
'application/json; charset=UTF-8'
)
response
=
urllib2.urlopen(request)
data
=
response.read()
# print data
dic
=
json.loads(data)
ErrMsg
=
dic[
'BaseResponse'
][
'ErrMsg'
]
if
len
(ErrMsg) >
0
:
print
ErrMsg
Ret
=
dic[
'BaseResponse'
][
'Ret'
]
if
Ret !
=
0
:
return
False
return
True
def
addMember(ChatRoomName, UserNames):
url
=
base_uri
+
'/webwxupdatechatroom?fun=addmember&pass_ticket=%s'
%
(pass_ticket)
params
=
{
'BaseRequest'
: BaseRequest,
'ChatRoomName'
: ChatRoomName,
'AddMemberList'
:
','
.join(UserNames),
}
request
=
urllib2.Request(url
=
url, data
=
json.dumps(params))
request.add_header(
'ContentType'
,
'application/json; charset=UTF-8'
)
response
=
urllib2.urlopen(request)
data
=
response.read()
# print data
dic
=
json.loads(data)
MemberList
=
dic[
'MemberList'
]
DeletedList
=
[]
for
Member
in
MemberList:
if
Member[
'MemberStatus'
]
=
=
4
:
#被对方删除了
DeletedList.append(Member[
'UserName'
])
ErrMsg
=
dic[
'BaseResponse'
][
'ErrMsg'
]
if
len
(ErrMsg) >
0
:
print
ErrMsg
return
DeletedList
def
main():
opener
=
urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
urllib2.install_opener(opener)
if
getUUID()
=
=
False
:
print
'获取uuid失败'
return
showQRImage()
time.sleep(
1
)
while
waitForLogin() !
=
'200'
:
pass
os.remove(QRImagePath)
if
login()
=
=
False
:
print
'登录失败'
return
if
webwxinit()
=
=
False
:
print
'初始化失败'
return
MemberList
=
webwxgetcontact()
MemberCount
=
len
(MemberList)
print
'通讯录共%s位好友'
%
MemberCount
ChatRoomName
=
''
result
=
[]
for
i
in
xrange
(
0
,
int
(math.ceil(MemberCount
/
float
(MAX_GROUP_NUM)))):
UserNames
=
[]
NickNames
=
[]
DeletedList
=
''
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[
'UserName'
])
NickNames.append(Member[
'NickName'
].encode(
'utf-8'
))
print
'第%s组...'
%
(i
+
1
)
print
', '
.join(NickNames)
print
'回车键继续...'
raw_input
()
# 新建群组/添加成员
if
ChatRoomName
=
=
'':
(ChatRoomName, DeletedList)
=
createChatroom(UserNames)
else
:
DeletedList
=
addMember(ChatRoomName, UserNames)
DeletedCount
=
len
(DeletedList)
if
DeletedCount >
0
:
result
+
=
DeletedList
print
'找到%s个被删好友'
%
DeletedCount
# raw_input()
# 删除成员
deleteMember(ChatRoomName, UserNames)
# todo 删除群组
resultNames
=
[]
for
Member
in
MemberList:
if
Member[
'UserName'
]
in
result:
NickName
=
Member[
'NickName'
]
if
Member[
'RemarkName'
] !
=
'':
NickName
+
=
'(%s)'
%
Member[
'RemarkName'
]
resultNames.append(NickName.encode(
'utf-8'
))
print
'---------- 被删除的好友列表 ----------'
print
'\n'
.join(resultNames)
print
'-----------------------------------'
# windows下编码问题修复
class
UnicodeStreamFilter:
def
__init__(
self
, target):
self
.target
=
target
self
.encoding
=
'utf-8'
self
.errors
=
'replace'
self
.encode_to
=
self
.target.encoding
def
write(
self
, s):
if
type
(s)
=
=
str
:
s
=
s.decode(
'utf-8'
)
s
=
s.encode(
self
.encode_to,
self
.errors).decode(
self
.encode_to)
self
.target.write(s)
if
sys.stdout.encoding
=
=
'cp936'
:
sys.stdout
=
UnicodeStreamFilter(sys.stdout)
if
__name__
=
=
'__main__'
:
print
'本程序的查询结果可能会引起一些心理上的不适,请小心使用...'
print
'回车键继续...'
raw_input
()
main()
print
'回车键结束'
raw_input
()
|
友尽 。
亲测有效,有 11 个删除我的「好友」,默默归类为 11 个相亲男,还有比我伤的更深的么?
最后此篇关于python轻松查到删除自己的微信好友的文章就讲到这里了,如果你想了解更多关于python轻松查到删除自己的微信好友的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
namespace GameForge { namespace Core { class CTribool; } } GameForge::Core::CTri
有没有什么方法可以限制 PHP 中的可见性,就像“包”可见性在 Java 中起作用或至少“ friend ”可见性在 C++ 中起作用一样?维护大型 OOP 项目并且不让任何人使用代码的任何部分的最佳
我实际上是在尝试让一个模板类与另一个模板类成为 friend 。类似的东西: #include template class Test1 { private: static int
我创建了一个应用程序,我试图通过 facebook 邀请 friend js 方法邀请 friend ,但一切正常,但没有向该 friend 发送通知。 我的申请链接:http://www.huzoo
我正在建立一个网站。我希望用户邀请 Facebook 好友查看用户可以在我的网站上创建的页面。所以我正在努力完成它。但我认为 FB Api 没有设置来做我想做的事情。我认为这是为了防止垃圾邮件,但我真
当用户通过 Facebook 注册我的网站时。它使用 Facebook 身份验证 API 在“注册”按钮旁边返回“3 位 friend 已注册”。 def facebook_authenticated
几周前我开始使用 Android 编程。而且我有一些 Java 技能。 所以我正在创建一个应用程序,它需要获取 Facebook 好友列表(只是名字而不是图片)。我用谷歌搜索,大多数人都说“阅读 Fa
我正在寻找一种连接到 Facebook 的方法,允许用户输入他们的用户名和密码,然后让我们的应用程序连接到他们的帐户并获取他们的联系人,以便他们可以邀请他们加入我们网站上的群组。我以前写过一个 Fac
我需要的功能是在自定义设计的网站页面上向用户显示 Facebook 好友列表,用户可以在其中选择其中一些并发送邀请。 在 API v2.0 中,可以通过这种方式获取好友列表: FB.api('/me/
我正在创建一个应用程序,并希望使用该应用程序的人可以在 Facebook 上找到使用相同应用程序的 friend 。在这方面的任何帮助都会很棒。 我知道这是可以做到的。我在 Instagram 和 T
我正在尝试访问用户 friend ,但我似乎无法弄清楚我将如何去做。没有明确的方法来访问 friend 列表,所以我认为它可能是一个属性,但这似乎不起作用。我正在尝试浏览文档并找到了一些有用的信息 h
我已经成功获取了好友列表: //token NSString *acessToken = [NSString stringWithFormat:@"%@",_facebookAccount.crede
我正在尝试获取用户的 facebook 好友列表,但它只返回好友的数量。下面是我的代码。这段代码有什么问题吗? -(void)loginViewFetchedUserInfo:(FBLoginView
我在我的应用程序中集成了 Facebook SDK。 我想获取安装了我的应用程序的 Facebook 好友列表。该列表应包含他们的详细信息,例如 Facebook 电子邮件 ID、Facebook 名
当有人访问我的网页时,我想让他将访问过的网页分享到他的Facebook好友墙上,以便其他人也可以点击共享链接进入访问过的网页。条件:访问的网页应该出现在选定 friend 的 Facebook 墙上,
我的类(class) Bloque 是我其他类(class) user 的 friend ,我想传递我的 user 类到我的 Bloque 类上名为 void colision() 的函数。 所以我尝
我尝试使用 this link这个。在本教程中,我只发布我的应用程序链接到我的墙上。但我想与所有 friend 分享我的应用程序链接。就像 XYZ 邀请您尝试 ABCapp 一样,只在通知栏中。当点击
我正在使用 Facebook Android SDK。有没有一种简单的方法可以让用户的 friend 下载该应用程序?例如,应用程序 Draw Something 实现了这一点。我似乎找不到关于这个主
我有一个 Flutter 应用程序,您可以在其中使用 Facebook 登录。 ( https://pub.dev/packages/flutter_facebook_login )。 当用户登录时,
我想显示我的 VK 好友列表。 private ArrayList Friends = new ArrayList(); Friends = api.getFriends(account.user_
我是一名优秀的程序员,十分优秀!