基于python的微信特定消息回复,例如拜年和生日祝福

遇到问题

  • 新年伊始,相信会收到很多的拜年信息,而我们又不想一一回复,这时就该python登场了,它可以挂在电脑上,而你就可以自由的去做自己想做的事。

环境

  • 一台电脑、vscode、python

解决方案

解决步骤

  1. 找到微信并绑定会话控件
  2. 读取回复信息文件
  3. 找到未回复消息
  4. 分别回复特定消息与未设置消息

具体实施

###导入所需python库

  • pandas与numpy是python所常用的库,而uiautomation是适用于 Windows 的辅助功能框架。 它提供对桌面上大多数 UI 元素的编程访问。 它使辅助技术产品(如屏幕阅读器)能够向最终用户提供有关 UI 的信息,并通过标准输入以外的方式操作 UI。 UI 自动化还使自动测试脚本能够与 UI 交互。
import pandas as pd
import numpy as np
from uiautomation import WindowControl

找到微信并绑定微信会话控件

#找到微信
wx = WindowControl(Name = "微信")
print(wx)
#调出微信窗口
wx.SwitchToThisWindow()
#找到并绑定控件
hw = wx.ListControl(Name = "会话")
print("找到会话控件" , hw)

编写并读取回复消息文件

  • 编写csv文件,CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本来开启,再则先另存新档后用EXCEL开启,也是方法之一。以下是csv文件内容:
序号,关键词,回复内容
1,新年快乐,福启新岁,龍年顺遂,岁岁平安~
2,哈哈哈,别笑了
3,告辞,再见
4,世界上最好的语言,python
5,最难懂的语言,Java
6,生日快乐,多谢您的生日祝福
  • 在python文件中读取csv文件
#读取csv文件
df = pd.read_csv("回复数据.csv")

找出未回复消息

  • 找出前四个未回复的对话栏
#找会话框的前四个
we = hw.TextControl(searchDepth=4)
while not we.Exists(0) :
   pass
print("未回复消息",we)

读取最新消息,并制作回复列表

  • 使用click方法选到对话栏,并使用Listcontrol来读取最新消息。apply用来通配消息,并根据csv文件来制作回复列表
#点击未读信息
we.Click(simulateMove=False)
#读取最后一条
last_msg = wx.ListControl(Name = "消息").GetChildren()[-1].Name
print("最后一条消息",last_msg)
#判断关键字
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()
print("ar",ar)

回复消息

  • 找到对话框,首先输入所回复的信息,并按下回车,最后清除列表
wx.SendKeys(ar[0], waitTime=0)
wx.SendKeys('{Enter}', waitTime=0)
wx.TextControl(SubName = ar[0][:5]).RightClick()

例子

在这里插入图片描述

完整代码

import pandas as pd
import numpy as np
from uiautomation import WindowControl

#可以一直挂到后台,实施回复信息,但不能跳转到其他页面

#找到微信
wx = WindowControl(Name = "微信")
print(wx)
#调出微信窗口
wx.SwitchToThisWindow()
#找到并绑定控件
hw = wx.ListControl(Name = "会话")
print("找到会话控件" , hw)
#读取csv文件
df = pd.read_csv("回复数据.csv")

while True :
    #找会话框的前四个
    we = hw.TextControl(searchDepth=4)
    
    
    while not we.Exists(0) :
        pass
    print("未回复消息",we)
    
    #存在未读信息
    if we.Name :
        #点击未读信息
        we.Click(simulateMove=False)
        #读取最后一条
        last_msg = wx.ListControl(Name = "消息").GetChildren()[-1].Name
        print("最后一条消息",last_msg)
        #判断关键字
        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()
        print("ar",ar)
        
        #找到匹配的数据
        if ar :
            print("进入到 if" ,ar[0])
            wx.SendKeys(ar[0], waitTime=0)
            
            wx.SendKeys('{Enter}', waitTime=0)
            
            wx.TextControl(SubName = ar[0][:5]).RightClick()
            
        else :
            print("进入到 else")
            wx.SendKeys("我没有理解",waitTime=0)
            wx.SendKeys("{Enter}",waitTime=0)
            wx.TextControl(SubName = "我没有理解").RightClick()
        

制作不易还望三连,谢谢啦

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值