一、pip Install itchat

既然都用python解决问题了,第一步当然是明确用什么库啦,直接执行pip install itchat:


done!

二、itchat.login()

下完了库,就得试下库的最入门用法啦,啦啦啦:


但没想到,复现到这一步时就出问题了。直接用itchat库像上面这样操作,登陆的会是微信的网页版,而腾讯之前为了防止大家用计算机自动化操作微信从而可能会导致一些安全问题,封停了网页版微信API,如果只是像上面这样做的话,控制台会提醒说“由于安全原因,此微信号不能使用网页版微信。你可以使用+Windows+版微信或+Mac+版微信登录。

ok,男人要有耐心,遇事心平气和,google+知乎,若没试过七七四十九种解决方案,万不可直接考虑砸电脑。

很好,经过几次试错以后,找到一种简单便捷的解决方案:


很好,如上操作完,登陆成功!哦耶✌️!

三、itchat.search_friends() + send()

很好,登陆成功,来试着给好友发条消息?

我大概执行了下面这样的代码:


执行结果:

很好,发送成功!

四、@itchat.msg_register()

接下来我们要监听一下好友发送的消息,尝试在本机执行参考文档中的这段代码:


在我本机复现的效果,没毛病,效果杠杠的,发啥我都能在控制台监听到了,嘿嘿嘿:

五、def reserver_info(msg)

接下来我们来复现下面这一段:


我本机上的情况(抄的我好开心啊):

六、@itchat.msg_register([TEXT, PICTURE, RECORDING])

上面完成了对于文字内容的监听,接下来要感受一下图片、语音什么的如何处理了。

尝试复现下面的代码:


本机复现成功,结果我就先不放了,不然又得打码,好麻烦

原文中对于图片格式和音频格式的讲解:

七、os.mkdir() + info()

我们现在牵扯到应该怎么存储图片和语音信息了。

而我接下来继续的行为,低情商的说法叫:继续抄;高情商的说法:人家代码的可复用性好高。

在本机复现这段代码:

执行结果:


是python就是这么容易顺利执行,让人感觉枯燥且乏味吗?Hhh,当年劳资要是想用别人的C++的代码,没个取经的精神,过上那么九九八十一难是绝对调不通滴呀,再一次,手动捂脸:

八、note_info(msg)

现在我们能够存储聊天信息了,就是既然是要做防撤回软件,我们应该只需要存那些撤回了的信息,那么靠什么来判别哪些信息是撤回消息呢?Content模块为我们提供了NOTE类型,该类型指的是系统消息:


好,我们继续在本地复现上面的程序:


复现成功,枯燥。

九、完整程序代码

最后就是完整程序的代码:

import itchat
from itchat.content import *
import os
import time
import xml.dom.minidom    # 解析xml模块# 这是保存撤回消息的文件目录(如:图片、语音等),这里已经写死了,大家可以自行修改
temp = '/Users/yourname/Documents/itchat' + '/' + '撤回的消息'
if not os.path.exists(temp):os.mkdir(temp)itchat.auto_login(True)    # 自动登录dict = {}    # 定义一个字典# 这是一个装饰器,给下面的函数添加新功能
# 能够捕获好友发送的消息,并传递给函数参数msg
@itchat.msg_register([TEXT, PICTURE, FRIENDS, CARD, MAP, SHARING, RECORDING, ATTACHMENT, VIDEO])  # 文本,语音,图片
def resever_info(msg):global dict    # 声明全局变量info = msg['Text']  # 取出消息内容msgId = msg['MsgId']  # 取出消息标识info_type = msg['Type']  # 取出消息类型name = msg['FileName']  # 取出消息文件名# 取出消息发送者标识并从好友列表中检索fromUser = itchat.search_friends(userName=msg['FromUserName'])['NickName']ticks = msg['CreateTime']  # 获取信息发送的时间time_local = time.localtime(ticks)dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local)  # 格式化日期# 将消息标识和消息内容添加到字典# 每一条消息的唯一标识作为键,消息的具体信息作为值,也是一个字典dict[msgId] = {"info": info, "info_type": info_type, "name": name, "fromUser": fromUser, "dt": dt}@itchat.msg_register(NOTE)  # 监听系统提示
def note_info(msg):# 监听到好友撤回了一条消息if '撤回了一条消息' in msg['Text']:# 获取系统消息中的Content结点值content = msg['Content']# Content值为xml,解析xmldoc = xml.dom.minidom.parseString(content)# 取出msgid标签的值result = doc.getElementsByTagName("msgid")# 该msgId就是撤回的消息标识,通过它可以在字典中找到撤回的消息信息msgId = result[0].childNodes[0].nodeValue# 从字典中取出对应消息标识的消息类型msg_type = dict[msgId]['info_type']if msg_type == 'Recording':    # 撤回的消息为语音recording_info = dict[msgId]['info']  # 取出消息标识对应的消息内容info_name = dict[msgId]['name'] # 取出消息文件名fromUser = dict[msgId]['fromUser'] # 取出发送者dt = dict[msgId]['dt'] # 取出发送时间recording_info(temp + '/' + info_name) # 保存语音# 拼接提示消息send_msg = '【发送人:】' + fromUser + '\n' + '发送时间:' + dt + '\n' + '撤回了一条语音'itchat.send(send_msg, 'filehelper') # 将提示消息发送给文件助手# 发送保存的语音itchat.send_file(temp + '/' + info_name, 'filehelper')del dict[msgId] # 删除字典中对应的消息print("保存语音")elif msg_type == 'Text':text_info = dict[msgId]['info'] # 取出消息标识对应的消息内容fromUser = dict[msgId]['fromUser'] # 取出发送者dt = dict[msgId]['dt'] # 取出发送时间# 拼接提示消息send_msg = '【发送人:】' + fromUser + '\n' + '发送时间:' + dt + '\n' + '撤回内容:' + text_info# 将提示消息发送给文件助手itchat.send(send_msg, 'filehelper')del dict[msgId] # 删除字典中对应的消息print("保存文本")elif msg_type == 'Picture':picture_info = dict[msgId]['info'] # 取出消息标识对应的消息内容fromUser = dict[msgId]['fromUser'] # 取出发送者dt = dict[msgId]['dt'] # 取出发送时间info_name = dict[msgId]['name'] # 取出文件名picture_info(temp + '/' + info_name) # 保存图片# 拼接提示消息send_msg = '【发送人:】' + fromUser + '\n' + '发送时间:' + dt + '\n' + '撤回了一张图片'itchat.send(send_msg, 'filehelper') # 将图片发送给文件助手# 发送保存的语音itchat.send_file(temp + '/' + info_name, 'filehelper')del dict[msgId] # 删除字典中对应的消息 print("保存图片")itchat.run()

运行结果:

~~~over~~~

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

Python资料、技术、课程、解答、咨询也可以直接点击下面名片,添加官方客服斯琪

女友老喜欢撤回消息?看我如何利用Python识破她的心理相关推荐

  1. python查看微信撤回消息_想查看微信好友撤回的消息?Python帮你搞定

    要说微信最让人恶心的发明,消息撤回绝对能上榜. 比如你现在正和女朋友用微信聊着天,或者跟自己喜欢的女孩子聊着天,一个不留神,你没注意到对方发的消息就被她及时撤回了,这时你很好奇,好奇她到底发了什么?于 ...

  2. 简单的python抢红包脚本-这个Python脚本牛逼了,秒抢红包就算了,还能无视撤回消息...

    原标题:这个Python脚本牛逼了,秒抢红包就算了,还能无视撤回消息 曾经有一份"份额很足"的大红包,摆在我面前,我没有好好珍惜,如果上天再给我一次机会,我会对发红包的人说三个字: ...

  3. 微信反撤回linux,终于,微信防撤回来了,简单设置一下就能查看撤回消息,太实用了...

    原标题:终于,微信防撤回来了,简单设置一下就能查看撤回消息,太实用了 今日分享: 微信.QQ 消息防撤回 适用系统:安卓 自从微信推出"撤回消息"这个功能以来,平时我们在聊天的时候 ...

  4. Anti-recall 防撤回神器 -- Android 免root查看撤回消息和闪照 官网

    Anti-recall 防撤回神器官方下载 Android 免root查看撤回消息和闪照 官网 下载地址 anti-recall.com 哪里撤回点哪里 妈妈再也不用担心我错过劲爆消息了呢 爆照撤回没 ...

  5. qq无限时间撤回消息bug_手机QQ新功能汇总,比微信有意思多了

    手机 QQ 的更新相比微信来说更加频繁,虽然多是在小细节上面,但可玩性和实用性都比微信高很多.近期,QQ又为用户准备了不少好玩的更新,一起来看看. 青少年模式上线 打开安卓版新版手机 QQ 的[设置] ...

  6. WeChat之小工具:基于C++程序代码设计的查看微信撤销、撤回消息(包括文本、图片、视频等)GUI小工具

    WeChat之小工具:基于C++程序代码设计的查看微信撤销.撤回消息(包括文本.图片.视频等)GUI小工具 导读      哈哈,千万不要给程序猿随便发信息,程序猿认真起来,别说你发的微信信息,就连你 ...

  7. 程序员利用Python破解老婆撤回的消息,这样竟然还有老婆?

    文章背景: 闲来无事,在街上吃了些零食并用微信付款.不得不说程序员的思维和别人的是真不同,我想的却是微信真强大,稍微查看了一下,还有许多的小程序,很多大企业都在与它合作.这些还不是最重要的,关键是看到 ...

  8. 「话题」为什么微信、钉钉撤回消息的时限不同?小米200万改LOGO值不值?

    本周共有3个话题: 对于消息撤回,微信限制2分钟内,钉钉.企业微信限制24小时内,怎么看待这种区别? 你觉得直播中的打赏对应马斯洛需求理论的哪一层?为什么? 小米的logo直角变圆角,值不值200万? ...

  9. 微信撤回消息为何要提示对方?腾讯解答真相

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 来源:IT之家 只要我撤回得快,你们就看不到我-想必 ...

最新文章

  1. python的功能模块_Python的功能模块[1] - struct - struct 在网络编程中的使用
  2. 二分算法,选择,冒泡排序算法
  3. python可以自学吗-没有编程基础,可以自学Python吗?
  4. hibernate 多对多(many-to-many)
  5. android中英文混合,搜狗手机输入法Android3.3中英混输无障碍之终结篇
  6. 【Spring源码分析】Bean加载流程概览
  7. 431.chapter10. working with flat files
  8. 转载 lemontrees(lemontree) 的计算机系考研攻略 (游戏版)
  9. BZOJ3571 [Hnoi2014]画框 【分治 + KM算法】
  10. JAVA 相关书籍推荐(全)
  11. uniapp判断是ios、android、小程序
  12. 物联网:互联网的终结者?
  13. 【obs-studio开源项目从入门到放弃】obs aac opus 音频编码器的使用
  14. VI,NDVI,EVI
  15. NVIDIA JETSON XAVIER NX TX2 NANO 比较及与显卡算力对比
  16. vue 具名插槽用法
  17. 娃娃乐学拼音软件许可及服务协议
  18. 自动控制原理知识点梳理——6.线性系统的校正方法
  19. python 边缘扩充方式
  20. 微软开源 纸牌游戏代码_5个适用于Linux的开源纸牌和棋盘游戏

热门文章

  1. 牛哄哄的Celery
  2. 【JavaSE】throws 异常处理
  3. 每天进步一点点~注解篇
  4. PostgreSQL 物流轨迹系统数据库需求分析与设计 - 包裹侠实时跟踪与召回
  5. 什么是JavaFX?
  6. GPON Type C保护
  7. 在SINA blog里加背景音乐的三种方法
  8. 医疗器械行业税收筹划研究
  9. 【2022年电赛】有人开摆,有人跑路,有人5秒不识数
  10. jQuery的Ajax实例(附完整代码)