Python实现微信自动回复信息的功能(根据不同信息回复对应的信息),手把手搭建加代码分析

目录

一.效果展示

二.前言介绍

三.进入正题

1.需要用到的包

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

2.1导入所需要用到的包

2.2定义微信窗口控件 

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

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

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

2.5获取最新的信息

2.6进入循环做的一些操作

2.7回复信息

四:完整代码


一.效果展示

二.前言介绍

我们使用的第三方包是: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:# 获取未读消息控件wewe = 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()

觉得有帮助能给我三连支持一下吗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/62900.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信开发之自动回复图文消息

最近开始做公司的微信项目,深切的感受到了微信的不同,做微信是需要从头开始好好学的,在此记录一下学习微信的过程,也希望以后能根据这些文章迅速掌握微信开发的知识。少踩坑,,(laravel框架&…

微信公众号开发—自定义菜单、被动回复消息

自定义菜单 自定义菜单需要我们以POST的方式去请求接口,并且需要携带按钮信息(格式为json)。 由于自定义菜单较为简单,这里使用微信官方提供的接口测试工具对按钮增加接口进行测试: 通过appid和secret获取access_token。生成按钮数据(JSON)…

msg文件自定义消息话题

以LVI-SAM为例,cloud_info.msg就是LVI-SAM自定义的消息类型;通常,都是利用msg文件,生成.h文件,然后cpp文件添加.h就可以正常使用自定义消息了; 自定义msg消息步骤 Step1:创建并编写msg文件&am…

微信公众号自定义回复(关键词回复:文本消息、图文消息)

要回复客户发到微信公共号的消息,首先要获取用户发来的消息, 接收地址就是微信公众号基本配置里写的服务器地址所在的文件地址; $postStr $GLOBALS["HTTP_RAW_POST_DATA"]; //微信返回的信息。包含用户所发的消息 $postObj si…

微信开发 (自动回复图片,自定义菜单)

微信是一个高大上的东西,恩,没错 首先输入网址mp.weixin.qq.com进入微信公众平台 注册账号和密码(注意的是这里的账号和密码不是微信的账号密码) 进入之后点击左侧开发/开发者工具 在右侧点击进入公众平台测试账号&#xff08…

大众CEO提前“毕业”,马斯克:软件是通向未来的关键

过去,软件是汽车的一部分,而如今,软件决定了汽车的价值。 近日,知名传统汽车厂商大众CEO赫伯特迪斯 (Herbert Diess) 提前卸任新闻引发人们热议,其好友特斯拉CEO马斯克发推表示:“软件是通向未来的关键。”…

“AI 不会取代程序员,而是其增长的加速器!”

ChatGPT 热潮下,关于 AI 是否会取代程序员的讨论不绝于耳,而本文作者认为:AI 反而会推动更多开发者的出现。 原文链接:https://interconnect.substack.com/p/ai-will-create-more-developers-not 未经允许,禁止转载&am…

谷歌终于也坐不住了 。。。

来源于51CTO技术栈 整理 | 言征 刚过去的一周,我们刚经历了三场对话式AI的大事:OpenAI的GPT-4,微软Office 365“核弹式”升级,百度的中文语言大模型“文心一言”,谷歌终于坐不住了,21日,谷歌首席…

我对 ChatGPT 进行多方位了解后的报告,超级全面,建议想了解的朋友看看(截至 2023.5.17)

优质介绍视频: GPT4前端【AI编程新纪元】 【渐构】万字科普GPT4为何会颠覆现有工作流;为何你要关注微软Copilot、文心一言等大模型 此文章不定期更新(一周应该会更新一次) 最近一次更新:2023.5.17 23:00(…

获取钉钉企业部门用户信息

获取钉钉企业用户信息 有一个需求,需要获取本公司钉钉里面所有部门的员工信息,查阅钉钉官方文档后整理出了以下步骤: 1.登录钉钉企业管理员账号,创建一个应用 因为是公司内部使用区别第三方,所以选择企业内部开发 点击创建应用,填写基本信息 服务器IP写公网IP(可直接百度本机…

企业数字化转型|钉钉小程序开发权威指南

书籍发布:《钉钉小程序开发权威指南》书籍正式预售 钉钉技术团队聚力撰写,本书细致全面地介绍钉钉小程序技术原理及开发要点, 详细介绍从成为一名钉钉开发者到小程序应用上架的每一步流程。助力企业实现组织数字化和业务数字化。 购买渠道 …

钉钉E应用架构详解

E应用框架详解: App:指的是E应用。 Page:页面,一个app有多个page。 App的生命周期: 当用户点击应用,进去onLaunch(启动应用)->onShow,当用户点返回按钮时,不会销毁当前页面(保活状态)&…

Python结合钉钉实时自动监控股票行情,上班炒股再也不怕老板发现

最近全球股市开始回暖,之前清仓的股民现在又陆续开始建仓。股市交易时间,一般也是上班时间,频繁的查看股票软件不仅会影响工作效率,也容易被老板以为工作不饱和。所以,我们就借助python的强大功能,把提前设…

【钉钉-场景化能力包】应用内发DING消息

客户痛点 面对不同类型的中小型企业,人员较多,找人非常困难,管理子公司的时候,协调的问题就更多,企业使用常规的个人聊天软件,消息发送后,不能准确判断消息是否已读,导致沟通管理效…

DingTalk「开发者说」如何开发钉钉高价值应用三部曲

一、钉钉是什么? 钉钉是企业应用数字化的操作系统 简单来说,钉钉是企业应用数字化的操作系统,就如同PC上的windows操作系统一样,我们可以在上面安装各种应用比如office、WPS,用于企业的各种实际应用。 钉钉自带原生…

数据分析:扩展企业微信、钉钉、飞书等告警通知渠道

本章节主要讲述如何扩展告警的通知渠道,以便将告警发送到第三方应用中 企业微信 实现目标 ●在鸿鹄中创建的告警被触发后,将告警通知发送至指定的企业微信群聊 配置步骤 1、打开“企业微信”,点击告警群右上角的“...”按钮 2、点击“群机器人…

Meta 开源 ImageBind 新模型,超越 GPT-4,对齐文本、音频等 6 种模态!

整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 据外媒报道,上周四,Google、微软、OpenAI 几家公司的 CEO 受邀去白宫,共论关于人工智能发展的一些重要问题。然而,让人有些想不通的是,深耕 A…

刷屏的Llama 2性能究竟如何?

Datawhale干货 大模型:Llama 2, 来源:机器之心 虽然性能仍不及ChatGPT 3.5,但开源的力量是无法估量的。 相信很多人都被 Meta 发布的 Llama 2 刷了屏。OpenAI 研究科学家 Andrej Karpathy 在推特上表示,「对于人工智能…

ESP8266用点灯app接入小爱同学

ESP8266接入小爱同学—智能LED台灯或风扇 首先用的是arduino IDE对esp8266进行的编译,arduino对8266编译环境的具体配置可参考 1.利用WiFiManager库实现自动配网,亦能够满足在不同WiFi下可以不用更改程序即可链接不同的WiFi 2.利用esp8266 OTA功能实现应…

2023年,TO B投资巨轮驶向何处?

冰点市场中,危与机也往往同在,能够在这次疫情长跑竞赛中抓得住火花的企业,也一定将会在接下来的2023年走出庭院、走向更多产业场景,和更大的世界。 作者|斗斗 编辑|皮爷 出品|产业家 融资事件减少58%、融资金额减少37%、平…