怎么用Python实现微信自动回复,一文看懂

该文章介绍了一种替代itchat的方法,通过UIAutomation库控制微信窗口,实现实时检测并自动回复特定联系人的消息。程序读取CSV数据,根据关键词匹配回复内容,无法匹配时则发送默认回复。
摘要由CSDN通过智能技术生成

都什么年代了,不会还有人用itchat吧,itchat早就寄了。在网上搜用Python实现微信自动回复的,搜来搜去全是用itchat。一运行全都不行。无奈只能自己用别的库实现。

#根据预定的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("没有新消息")

效果如下

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值