当前位置: 首页 > 科技观察

用Python80行代码实现一个微信消息撤回抓包功能_0

时间:2023-03-18 17:06:35 科技观察

自从微信推出这个消息撤回功能后,我就被折磨死了。我是一个好奇的人,微信发布了这个功能后,小编感觉身体一天比一天好。每次看到女神发的信息又撤回,可以说是心痒痒的。于是小编写了一个微信撤回消息捕捉器,让小编教大家如何摆脱单反白富美1、模块介绍首先要实现撤回消息捕捉,需要用到python上非常强大的库:痒痒的。如果你没有用过,我来介绍一下:项目描述itchat是一个开源的个人账号微信api项目。它使您能够通过命令行访问您的个人微信帐户。您可以通过命令行访问您的个人微信帐号。所以我们今天要用到这个库。首先,我们需要:pipinstallitchat2,熟悉模块功能。这里小编考虑到有些朋友没有使用过这个模块,所以下面就对这个模块做一个简单的说明。2.1如何登录微信既然我们要抓取微信的提现信息,那么第一步肯定是要登录微信。登录微信非常简单,只需要两行代码:importitchatitchat.login()。然后运行之后会出现一个二维码。扫描后在手机端授权登录,控制台会显示是否登录成功。?Loginsuccessfullyas。这说明你登录成功了,但是如果你是新创建的微信或者是很久没有使用的微信,是无法登录网页版微信的,所以这也会导致你登录失败登录不上就没办法2.2获取好友列表importitchatitchatitchat.auto_login(hotReload=True)friends=itchat.get_friends()#好友列表print(friends)使用函数get_friends()获取好友列表所有好友信息,包括昵称、评论名、地址、个性标签、性别等。[{'UserName':'@7c2215e17edf4b193f125d6ecf944abcaf19ba72e3eb24b8442d5e32d4a8be92','City':'','DisplayName':'','PYQuanPin':'','RemarkPYInitial':'','Province':'','KeyWord':'','RemarkName':'','PYInitial':'','EncryChatRoomId':'','**':'','Signature':'','NickName':'**','RemarkPYQuanPin':'','HeadImgUrl':'**'这里我只是复制了一个朋友的信息。关于隐私问题,我把所有信息都换成了**。我们的重点是分析这些信息的内容。例如,初始的UserName是用户的唯一标识,相当于同一个身份证号。所有好友UserName都不一样,然后NickName:这是好友的昵称,HeadImgUrl:这是好友的头像地址,有的就不一一介绍了。有兴趣的可以自己去了解一下。2.3向朋友发送消息我们现在要向朋友发送消息。怎么做?看下面代码importitchatitchat.auto_login(hotReload=True)itchat.send("人生苦短,我学python",toUserName="@c4326bda513bf7cdd19f1fa03dbf7e7bc3bbc57e5abb71fd580b2c3c32cddd99")itchat.send()这个函数可以放两个参数,第一个是想要发送给好友的信息,其次是指定好友也就是上面提到的toUserName=唯一标识UserName,但是我觉得上面的方法还是有点不妥,后来改进了importitchatitchat.auto_login(hotReload=True)friends=itchat.get_friends()nickName='你秃我不秃'foriinfriends:if'你秃我不秃'==i['NickName']:itchat.send('Life太短了,学习了python',toUserName=i['UserName'])break这样我就可以给任意一个好友发消息,在好友列表中搜索好友的昵称。如果我找到了,我会获取好友的UserName并发送消息,或者通过好友的RemarkName搜索,你可以根据自己的喜好选择2.4装饰器。itchat模块有很多功能。我不会在这里解释太多。我们只需要了解消息撤回所需要的知识点即可。现在,让我们继续最后的内容。装饰器是关于装饰器的简单介绍。装饰器是一个敢于扩展原有功能的功能。目的是在不改变原函数名的情况下,为函数增加新的函数。比如我喜欢安知的另一个函数foo()。你不知道函数的原理,你肯定不能修改这个函数的代码。您需要在此函数中添加一个函数,用于输出开始时间和结束时间,改变实现方式,然后你可以使用装饰器:()上面代码的意思:首先@show_time是用了一个装饰器show_time。这个时候装饰器的函数,也就是foo(),会作为参数传递给装饰器show_time()。我们知道函数作为返回值,真正执行了函数,所以程序会执行内部函数inner(),此时输出开始运行时间,然后调用foo()函数,最后输出结束运行时间,从而实现功能扩展。这也是典型的面向切面的编程思想。3、如何监听好友撤回的消息其实我们这里已经完成了对消息的监听,只需要稍微修改一下,但是这个程序还有一个问题,就是需要把所有的都保存起来消息,好友正常发送我们可以直接看到传入的消息。救它不是多余的吗?我们的目的是了解朋友撤回了哪些内容。这就涉及到如何监控好友是否撤回了信息。其实并不难。Content模块是我们提供的NOTE类型,是指系统消息,所以我们可以自定义一个函数来监听系统消息:importitchatfromitchat.contentimport*#导入itchat下的content模块itchat.auto_login(hotReload=True)@itchat.msg_register(NOTE)defnote_info(msg):#Monitorsystemmessagesprint(msg)itchat.run()运行程序,我们提取一条消息进行测试,输出结果如下:'DisplayName':'','ChatRoomId':0,'KeyWord':'','EncryChatRoomId':'','IsOwner':0}>,'Type':'Note','Text':'您已撤回消息'}截取的内容部分例子这样发送撤回小消息的文本内容为“您已撤回一条消息”。如果想知道好友是否撤回了消息,很简单。判断一下,msg['Text']=='您已撤回一条消息'。4.实现微信消息撤回和抓取功能。现在程序的每一步代码都分析到这里。下一步是总结所有代码。以下是所有代码的总结:下面我们先来测试一下。两个朋友给我发消息:结果: