admin管理员组文章数量:1541772
今天来使用Python
与Windows GUI
自动化工具来自动化微信的操作,作用为读取未读消息、根据关键词回复消息。以下是对代码的详细解释(文末有惊喜福利):
1.导入库:
- pandas 和 numpy:用于数据处理。
- uiautomation:用于Windows GUI自动化。
2.绑定微信主窗口:
- 创建一个WindowControl对象,尝试通过名称'微信'找到微信的主窗口。
3.切换到微信窗口:
- 使用SwitchToThisWindow()方法将焦点切换到微信窗口。
4.读取回复数据:
- 使用pandas的read_csv方法读取一个名为’回复数据.csv’的文件,其中包含关键词和对应的回复内容。
5.死循环接受消息:
- 使用一个无限循环来不断检查是否有新的未读消息。
6.查找未读消息:
- 在微信的中查找未读消息。
7.处理未读消息:
- 当检测到未读消息时,点击它。
- 读取最后一条消息的内容。
- 使用pandas的apply方法遍历 ‘回复数据.csv’ 中的每一行,检查关键词是否存在于最后一条消息中。如果存在,则返回对应的回复内容。
- 将匹配到的回复内容转换为列表。
8.发送回复:
- 如果找到了匹配的回复内容,则将其发送到聊天窗口,并发送一个回车键以发送消息。
完整源码
#根据预定的csv数据自动回复
import numpy as np
import pandas as pd
from uiautomation import WindowControl
import time
import requests
# 绑定微信主窗口
wx = WindowControl(Name='微信', searchDepth=1) #searchDepth=1参数指定在查找窗口时只搜索直接子级窗口,以提高查找效率
# 切换窗口
wx.ListControl()
wx.SwitchToThisWindow()#ListControl()方法用于列出所有子级窗口,而SwitchToThisWindow()方法则将焦点切换到微信主窗口
# 寻找会话控件绑定
hw = wx.ListControl(Name='会话')
# 通过pd读取数据
df = pd.read_csv('回复数据.csv', encoding='utf-8')
print(df)
conversations = hw.GetChildren() # GetChildren()方法,获取会话列表中的所有子控件。
jilu_num = 0
for conversation in conversations:
contact_name = conversation.Name
if contact_name == '水果巨亨': #改成你想回复的联系人的名字
conversation.Click(simulateMove=False)
message_list = wx.ListControl(Name='消息').GetChildren() # 获取消息列表中的所有子控件
jilu_num = len(message_list)
print(f"原本有{jilu_num}条消息")
# 死循环接收消息
while True:
for conversation in conversations:
contact_name = conversation.Name
if contact_name == '水果巨亨':
#conversation.Click(simulateMove=False)
message_list = wx.ListControl(Name='消息').GetChildren() # 获取消息列表中的所有子控件
new_msg_num = len(message_list)-jilu_num
if new_msg_num != 0:
print(f"有{new_msg_num}条新消息:")
for i in range(jilu_num, len(message_list)):
print(f"正在回复第{i+1}条消息")
#处理每一条消息
every_msg = message_list[i].Name
##########
# 判断关键字
msg = df.apply(lambda x: x['回复内容'] if x['关键词'] in every_msg else None, axis=1)
# 返回的结果是一个包含处理结果的Series对象,msg和列表差不多
print(f"匹配到的回复内容:{msg}")
msg.dropna(axis=0, how='any', inplace=True) # 这行代码移除回复内容中的空数据(NaN值)
ar = np.array(msg).tolist() # 这行代码将筛选后的回复内容转换为列表
# 能够匹配到数据时
if ar:
# 将数据输入
# 替换换行符号
wx.SendKeys(ar[0].replace('{br}', '{Shift}{Enter}'), waitTime=0)
# 发送消息,回车键
wx.SendKeys('{Enter}', waitTime=1)
# 通过消息匹配检索会话栏的联系人
print(f"回复内容是 {ar[0]}")
#wx.TextControl(SubName=ar[0][:5]).RightClick()
# break
#########不能匹配到数据,用机器人回复
else:
wx.SendKeys('不知道你在说什么', waitTime=0)
wx.SendKeys('{Enter}', waitTime=0)
jilu_num = len(message_list) + 1
print(f"现在一共有{jilu_num}条消息")
else:
print("没有新消息")
效果如下
文末福利
最后,如果你对Python感兴趣的话,可以试试我整理的这一份全套的Python学习资料,【点击这里】免费领取,希望对大家有帮助!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!
① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,学习不再是只会理论
④ 华为出品独家Python漫画教程,手机也能学习
这份完整版的Python全套学习资料已经上传至CSDN官方,朋友们如果需要可以微信扫描下方二维码免费领取。
版权声明:本文标题:用60行Python代码实现微信自动回复,一文看懂(附完整源码) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1727069021a1095961.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论