赞
踩
目录
我们使用的第三方包是:UIAutomation
UIAutomation的简介:UIAutomation 是一种自动化测试框架,它可以模拟用户在应用程序图形用户界面上的操作,并提供对应用程序界面的元素的完整访问。该框架最初由 Microsoft 开发,旨在为 Microsoft Windows 平台上的应用程序自动化测试提供一种标准化的方法。UIAutomation 框架允许测试人员编写自动化测试脚本,以便在应用程序的不同版本和环境中对其进行可靠的测试。这种自动化测试方法可以提高测试的速度和准确性,并减少了人工测试的负担。
总之UIAutomation的功能还是非常强大的,我们这次拿他来小试牛刀
我们要实现对收到的信息进行分析判断,我们首先需要将文本内容存储到本地,我们这次使用的是:csv文件,就是Excel文件,所以我们要解析对应的文件,就需要安装对应的包。
安装UIAutomation包
pip install uiautomation
安装pandas包,用来读取csv数据
pip install pandas
安装numpy包,目的是将读取的数据转换为列表
pip install numpy
- import numpy as np # 引入numpy库,目的是将读取的数据转换为列表
- import pandas as pd # 引入pandas库,用来读取csv数据
- from uiautomation import WindowControl # 引入uiautomation库中的WindowControl类,用来进行图像识别和模拟操作
- wx = WindowControl(
- Name='微信',
- # searchDepth=1
- )
这里我们定义了一个窗口控件WX,它表示的是微信应用的主窗口。通过 WindowControl 类的构造函数,传递给它窗口的名称 Name=‘微信’,它会在屏幕上查找并绑定微信应用的主窗口。也可以使用 searchDepth
参数来设置搜索窗口控件的深度。
- wx.ListControl()
- wx.SwitchToThisWindow()
这里使用了wx.ListControl()函数,它的作用是寻找窗口控件中的会话列表。然后调用wx.SwitchToThisWindow()函数,将微信应用切换到当前窗口,也就是将微信界面显示到最上层。
- hw = wx.ListControl(Name='会话')
- df = pd.read_csv('回复数据.csv', encoding='GBK')
这里获取绑定窗口的会话列表控件,并将其赋值给 hw
,在后续代码中使用。然后使用 pandas 库中的 read_csv()
函数读取名为“回复数据.csv”的 csv 文件,并设置编码格式为 GBK,将读取到的数据存储在 pandas 的 DataFrame 对象 df
中。
可以看到此时的数据就是一个列表,就跟excel表格一样
在编译器中看到的文件中的数据是这样的:
- while True:
- # 获取未读消息控件we
- we = hw.TextControl(searchDepth=4)
-
- # 死循环直到获取未读消息
- while not we.Exists():
- pass
这里使用了 while循环,一直监听微信群或私聊中的消息。当有新消息出现时,获取未读消息控件,并使用 while循环等待,直到获取到未读消息为止。serchDepth=4是表示我们只监听最上面的四个好友或群聊
last_msg = wx.ListControl(Name='消息').GetChildren()[-1].Name
在上面的 while 循环中,如果有新消息,就会执行这行代码,通过 wx.ListControl()
函数获取最新一条消息的窗口控件,将其名字存储到 last_msg
变量中。注意我们这里只会设置了只会获取到最后一次信息,如果想修改只要修改下标即可
- # 存在未读消息
- 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
的变量中。
- # 能够匹配到数据时
- 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()
觉得有帮助能给我三连支持一下吗
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。