python 个人微信自动回复(Windows GUI自动化)

# 根据预定的csv数据自动回复
import time

import numpy as np
import pandas as pd # 匹配回复数据
from uiautomation import WindowControl # 用于Windows GUI自动化

target_name = "老婆"

def wxListent():
    # 通过pd读取数据
    df = pd.read_csv('回复数据.csv', encoding='utf-8')

    # 绑定微信主窗口
    wx = WindowControl(Name='微信', searchDepth=1)  # searchDepth=1参数指定在查找窗口时只搜索直接子级窗口,以提高查找效率
    wx.ListControl() # 列出所有子级窗口
    wx.SwitchToThisWindow() # 将焦点切换到微信主窗口

    hw = wx.ListControl(Name='会话') # 寻找会话控件绑定
    conversations = hw.GetChildren()  # 获取会话列表中的所有子控件。
    record_num = 0

    # 获取聊天记录
    for conversation in conversations:
        contact_name = conversation.Name
        if target_name in contact_name:  # 改成你想回复的联系人的名字
            conversation.Click(simulateMove=False) # 点击进入
            message_list = wx.ListControl(Name='消息').GetChildren()  # 获取消息列表中的所有子控件
            record_num = len(message_list)
            print(f"原本有{record_num}条消息")
            break

    # 死循环接收消息
    while True:
        time.sleep(2) #休眠2秒

        for conversation in conversations:
            contact_name = conversation.Name
            if target_name in contact_name:
                conversation.Click(simulateMove=False)  # 点击进入
                message_list = wx.ListControl(Name='消息').GetChildren()  # 获取消息列表中的所有子控件
                # 新消息数
                start_msg_num = record_num
                new_msg_num = len(message_list) - record_num
                # 更新记录数
                record_num = len(message_list)
                if new_msg_num > 0:
                    print(f"有{new_msg_num}条新消息:")
                    for i in range(start_msg_num, len(message_list)):
                        # 处理消息
                        every_msg = message_list[i].Name
                        print(f"正在处理第{i + 1}条消息", every_msg)
                        # # 回复消息
                        # # 判断关键字
                        # 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)
                break

if __name__ == "__main__":
    wxListent()

 

posted @ 2024-12-24 10:36  CHHC  阅读(10)  评论(0编辑  收藏  举报