Python实现微信自动回复信息的功能(根据不同信息回复对应的信息)

 更新时间:2023年09月22日 14:56:13   作者:専心  
这篇文章主要介绍了Python实现微信自动回复信息的功能(根据不同信息回复对应的信息),我们使用的第三方包是UIAutomation,结合示例代码给大家介绍的非常详细,需要的朋友可以参考下

一.效果展示

二.前言介绍

我们使用的第三方包是:UIAutomation

UIAutomation的简介:UIAutomation 是一种自动化测试框架,它可以模拟用户在应用程序图形用户界面上的操作,并提供对应用程序界面的元素的完整访问。该框架最初由 Microsoft 开发,旨在为 Microsoft Windows 平台上的应用程序自动化测试提供一种标准化的方法。UIAutomation 框架允许测试人员编写自动化测试脚本,以便在应用程序的不同版本和环境中对其进行可靠的测试。这种自动化测试方法可以提高测试的速度和准确性,并减少了人工测试的负担。

总之UIAutomation的功能还是非常强大的,我们这次拿他来小试牛刀

三.进入正题

1.需要用到的包

我们要实现对收到的信息进行分析判断,我们首先需要将文本内容存储到本地,我们这次使用的是:csv文件,就是Excel文件,所以我们要解析对应的文件,就需要安装对应的包。

安装UIAutomation

pip install uiautomation

安装pandas包,用来读取csv数据

pip install pandas

安装numpy包,目的是将读取的数据转换为列表

pip install numpy

2.下面进入到代码的部分

2.1导入所需要用到的包

import numpy as np  # 引入numpy库,目的是将读取的数据转换为列表
import pandas as pd  # 引入pandas库,用来读取csv数据
from uiautomation import WindowControl  # 引入uiautomation库中的WindowControl类,用来进行图像识别和模拟操作

2.2定义微信窗口控件 

wx = WindowControl(
    Name='微信',
    # searchDepth=1
)

这里我们定义了一个窗口控件WX,它表示的是微信应用的主窗口。通过 WindowControl 类的构造函数,传递给它窗口的名称 Name=‘微信’,它会在屏幕上查找并绑定微信应用的主窗口。也可以使用  searchDepth  参数来设置搜索窗口控件的深度。

2.3调用寻找微信控件的方法

wx.ListControl()
wx.SwitchToThisWindow()

这里使用了wx.ListControl()函数,它的作用是寻找窗口控件中的会话列表。然后调用wx.SwitchToThisWindow()函数,将微信应用切换到当前窗口,也就是将微信界面显示到最上层。

2.3绑定窗口的会话列表控件并读取数据

hw = wx.ListControl(Name='会话')
df = pd.read_csv('回复数据.csv', encoding='GBK')

这里获取绑定窗口的会话列表控件,并将其赋值给  hw ,在后续代码中使用。然后使用 pandas 库中的  read_csv()  函数读取名为“回复数据.csv”的 csv 文件,并设置编码格式为 GBK,将读取到的数据存储在 pandas 的 DataFrame 对象  df  中。

可以看到此时的数据就是一个列表,就跟excel表格一样

 在编译器中看到的文件中的数据是这样的:

2.4使用while True:死循环监听信息

while True:
    # 获取未读消息控件we
    we = hw.TextControl(searchDepth=4)
    # 死循环直到获取未读消息
    while not we.Exists():
        pass

这里使用了 while循环,一直监听微信群或私聊中的消息。当有新消息出现时,获取未读消息控件,并使用 while循环等待,直到获取到未读消息为止。serchDepth=4是表示我们只监听最上面的四个好友或群聊

2.5获取最新的信息

last_msg = wx.ListControl(Name='消息').GetChildren()[-1].Name

在上面的 while 循环中,如果有新消息,就会执行这行代码,通过  wx.ListControl()  函数获取最新一条消息的窗口控件,将其名字存储到  last_msg  变量中。注意我们这里只会设置了只会获取到最后一次信息,如果想修改只要修改下标即可

2.6进入循环做的一些操作

  # 存在未读消息
    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)
        print(msg)
        # 数据筛选,移除空数据
        msg.dropna(axis=0, how='any', inplace=True)
        # 做成列表
        ar = np.array(msg).tolist()

上面的代码首先是使用wc.Click()点击事件,点击到未读信息的用户对话框中,使用  apply()  函数从读取到的 csv 文件中查找是否包含  last_msg  中的关键词。该函数使用了给定的 lambda 函数,对  df  DataFrame 表格中的每一行进行遍历,并返回符合条件的行,然后筛选出数据,使用  dropna()  函数删除无效数据(即值为 None 的行),利用  np.array()  函数将 DataFrame 对象转换为 numpy 数组,再使用  tolist()  函数将其转换为 Python 列表。将处理后的列表存储在名为  ar  的变量中。

2.7回复信息

    # 能够匹配到数据时
        if ar:
            # 将数据输入
            # 替换换行符号
            wx.SendKeys(ar[0].replace('{br}', '{Shift}{Enter}'), waitTime=1)
            # 发送消息 回车键
            wx.SendKeys('{Enter}', waitTime=0)
            # 通过消息匹配检索会话栏的联系人
            wx.TextControl(SubName=ar[0][:5]).RightClick()
        # 没有匹配到数据时
        else:
            wx.SendKeys('我不理解你什么意思', waitTime=1)
            wx.SendKeys('{Enter}', waitTime=0)
            wx.TextControl(SubName=last_msg[:5]).RightClick(10)

 上面就是回复信息了,wx.SendKeys(‘{Shift}{Enter}’)就是将ar列表中的数据输入到对话框中,waitTime是设置它的等待时间,wx.SendKeys'{Enter}'就是响应回车键,将信息发送出去,waitTime也是等待时间,wx.TextControl(SubName=ar[0][:5]).RightClick()的作用就是通过消息匹配检索会话栏的联系人,也就是实现一个鼠标右击功能:

  • wx.TextControl()  函数用于查找微信窗口中的文本框控件;
  • SubName  参数用于指定控件的子名称,即控件的标签名称;
  • ar[0][:5]  是一个字符串,它是通过某种方式获取的,用于指定要右键单击的文本在文本框中的位置;
  • RightClick()  方法模拟鼠标右键单击事件,即在指定的文本位置上单击鼠标右键。

四:完整代码

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import numpy as np  # 引入numpy库,目的是将读取的数据转换为列表
import pandas as pd  # 引入pandas库,用来读取csv数据
from uiautomation import WindowControl  # 引入uiautomation库中的WindowControl类,用来进行图像识别和模拟操作
# 绑定微信主窗口
wx = WindowControl(
    Name='微信',
    searchDepth=1
)
# 切换窗口
wx.ListControl()
wx.SwitchToThisWindow()
# 寻找会话控件绑定
hw = wx.ListControl(Name='会话')
# 通过pd读取数据
df = pd.read_csv('回复数据.csv', encoding='GBK')
print(df)
# 死循环接收消息
while True:
    # 从查找未读消息
    we = hw.TextControl(searchDepth=4)
    # 死循环维持,没有超时报错
    while not we.Exists():
        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)
        print(msg)
        # 数据筛选,移除空数据
        msg.dropna(axis=0, how='any', inplace=True)
        # 做成列表
        ar = np.array(msg).tolist()
        # 能够匹配到数据时
        if ar:
            # 将数据输入
            # 替换换行符号
            wx.SendKeys(ar[0].replace('{br}', '{Shift}{Enter}'), waitTime=1)
            # 发送消息 回车键
            wx.SendKeys('{Enter}', waitTime=1)
            # 通过消息匹配检索会话栏的联系人
            wx.TextControl(SubName=ar[0][:5]).RightClick()
        # 没有匹配到数据时
        else:
            wx.SendKeys('我不理解你什么意思', waitTime=1)
            wx.SendKeys('{Enter}', waitTime=1)
            wx.TextControl(SubName=last_msg[:5]).RightClick()

到此这篇关于Python实现微信自动回复信息的功能(根据不同信息回复对应的信息)的文章就介绍到这了,更多相关python微信自动回复信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python编程开发时间序列calendar模块示例详解

    python编程开发时间序列calendar模块示例详解

    这篇文章主要为大家介绍了python编程开发时间序列calendar模块示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步早日升职加薪
    2021-11-11
  • python读写LMDB文件的方法

    python读写LMDB文件的方法

    这篇文章主要为大家详细介绍了python读写LMDB文件的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Python基于requests库爬取网站信息

    Python基于requests库爬取网站信息

    这篇文章主要介绍了python基于requests库爬取网站信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 使用Django清空数据库并重新生成

    使用Django清空数据库并重新生成

    这篇文章主要介绍了使用Django清空数据库并重新生成,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • 基于Keras的格式化输出Loss实现方式

    基于Keras的格式化输出Loss实现方式

    这篇文章主要介绍了基于Keras的格式化输出Loss实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Pygame实战之经典泡泡龙小游戏

    Pygame实战之经典泡泡龙小游戏

    Python版的消除类的游戏还是很多的,今天就出一个消除类——泡泡龙小游戏。文中的示例代码很详细,感兴趣的小伙伴快来跟随小编一起学习一下吧
    2021-12-12
  • python 迭代器和iter()函数详解及实例

    python 迭代器和iter()函数详解及实例

    这篇文章主要介绍了python 迭代器和iter()函数详解及实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • Python+Matplotlib实现绘制三维折线图

    Python+Matplotlib实现绘制三维折线图

    立体图视觉上层次分明色彩鲜艳,具有很强的视觉冲击力,让观看的人驻景时间长,留下深刻的印象。今天我们就通过这篇文章来了解如何用python中的matplotlib库绘制漂亮的三维折线图吧
    2023-03-03
  • 梯度下降法介绍及利用Python实现的方法示例

    梯度下降法介绍及利用Python实现的方法示例

    梯度下降算法是一个很基本的算法,在机器学习和优化中有着非常重要的作用,下面这篇文章主要给大家介绍了关于利用Python实现梯度下降法的相关资料,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • Python轻松实现2位小数随机生成

    Python轻松实现2位小数随机生成

    在Python中,我们经常需要生成随机数,特别是2位小数的随机数,这在模拟实验、密码学、游戏开发等领域都很有用,下面是如何在Python中生成2位小数的随机数的代码示例,需要的朋友可以参考下
    2023-11-11

最新评论