本项目旨在使用Python
与Windows GUI
自动化工具来自动化微信的操作,作用为读取未读消息、根据关键词回复消息。以下是对代码的详细解释,文章后面会附有本项目完整代码:
- 导入库:
pandas
和numpy
:用于数据处理。uiautomation
:用于Windows GUI自动化。
- 绑定微信主窗口:
- 创建一个
WindowControl
对象,尝试通过名称'微信'
找到微信的主窗口。
- 创建一个
- 切换到微信窗口:
- 使用
SwitchToThisWindow()
方法将焦点切换到微信窗口。
- 使用
- 读取回复数据:
- 使用pandas的
read_csv
方法读取一个名为'回复数据.csv
'的文件,其中包含关键词和对应的回复内容。
- 使用pandas的
- 死循环接受消息:
- 使用一个无限循环来不断检查是否有新的未读消息。
- 查找未读消息:
- 在微信的中查找未读消息。
- 处理未读消息:
- 当检测到未读消息时,点击它。
- 读取最后一条消息的内容。
- 使用pandas的
apply
方法遍历'回复数据.csv
'中的每一行,检查关键词是否存在于最后一条消息中。如果存在,则返回对应的回复内容。 - 将匹配到的回复内容转换为列表。
- 发送回复:
- 如果找到了匹配的回复内容,则将其发送到聊天窗口,并发送一个回车键以发送消息。
项目完整源码
import pandas as pd
import numpy as np
from uiautomation import WindowControl, MenuControl
# 绑定微信主窗口
wx = WindowControl(
Name='微信',
)
# 切换窗口
wx.SwitchToThisWindow()
# 寻找会话控件绑定
hw = wx.ListControl(Name='会话')
# 通过pd读取数据
df = pd.read_csv('回复数据.csv', encoding='gb18030')
# 死循环接受消息
while True:
# 从查找未读消息
we = hw.TextControl(searchDepth=4)
# 死循环维持,没有超时报错
while not we.Exists(0):
pass
# 存在未读消息
if we.Name:
# 点击未读消息
we.Click(simulateMove=False)
# 读取最后一条消息
last_msg = wx.ListControl(Name='消息').GetChildren()[-1].Name
# 判断关键字
msg = df.apply(lambda x: x['回复内容'] if x['关键词'] in last_msg else None, axis=1)
# 数据筛选,移除空数据
msg.dropna(axis=0, how='any', inplace=True)
# 做成列表
ar = np.array(msg).tolist()
# 能够匹配到数据时
if ar:
# 将数据输入
# 替换换行符号
wx.SendKeys(ar[0].replace('{br}', '{Shift}{Enter}'), waitTime=0)
# 发送消息
wx.SendKeys('{Enter}', waitTime=0)
# 通过消息匹配检索会话栏的联系人
wx.TextControl(SubName=ar[0][:5]).RightClick()
# 没有匹配到数据时
else:
wx.TextControl(SubName=last_msg[:5]).RightClick()
注意: 本项目优缺点
优点:
- 自动化:代码能够自动检测未读消息,并根据预设的关键词自动回复,减少了人工操作的繁琐性。
- 灵活性:通过读取CSV文件,可以灵活地设置多个关键词和对应的回复内容,便于管理。
- 可扩展性:可以通过修改代码来添加更多功能,如隐藏会话、处理图片消息等。
- 高效性:对于大量重复性的消息处理任务,自动化能够显著提高效率。
缺点:
- 稳定性:自动化脚本可能受到微信界面变化、更新或网络波动等因素的影响,容易运行不稳定或出错。
- 安全性:使用自动化脚本处理微信消息可能存在一定的安全风险,如被黑客利用进行恶意操作。
- 依赖性:代码依赖于
uiautomation
库和pandas
库,如果环境中没有这些库,代码将无法运行。 - 用户体验:自动化回复可能无法像人工回复那样灵活和个性化,可能会影响用户体验。
- 维护成本:随着微信版本的更新和功能的增加,可能需要不断修改代码以保持兼容性,增加了维护成本。
- 反作弊机制:微信有自己的反作弊机制,频繁或不合理的自动操作可能触发这些机制,导致账号被封禁或限制。
- 数据隐私:处理个人或敏感信息时,需要特别注意数据隐私和安全性问题,避免泄露用户信息。
- 错误处理:如遇到无法识别的消息或无法找到控件时,可能会导致程序崩溃或陷入死循环。