Python uiautomation获取微信内容!聊天记录、聊天列表、全都可获取

Python uiautomation 是一个用于自动化 GUI 测试和操作的库,它可以模拟用户操作来执行各种任务。
通过这个库,可以使用Python脚本模拟人工点击,人工操作界面。本文使用 Python uiautomation 进行微信电脑版的操作。

以下是本次实验的版本号。

你需要安装 uiautomation

pip install uiautomation

示例代码

import time
import uiautomation as auto
import re
from plyer import notificationnotification_history = {}  # 历史消息def check_wechat_messages():# 获取微信窗口wechat_win = auto.WindowControl(Name="微信", ClassName="WeChatMainWndForPC")shoukuanWin = wechat_win.ListControl(Name="会话")bbb = shoukuanWin.GetChildren()for chatMsg in bbb:if "条新消息" in chatMsg.Name:# 计算消息条数match = re.match(r'([a-zA-Z0-9]+)(\d+)条新消息', chatMsg.Name)if match:nickname = match.group(1)message_count = int(match.group(2))printInfo = f"{nickname} 给你发送了 {message_count} 条消息"print(printInfo)print("------------")# 获取消息列表控件xiaoxis = wechat_win.ListControl(Name="消息")# 获取消息列表控件的子控件xiaoxi_children = xiaoxis.GetChildren()# 获取最后一个子控件last_xiaoxi = xiaoxi_children[-1]# 打印最后一条消息的内容print(last_xiaoxi.Name)# 在指定时间内不重发last_notification_time = notification_history.get((nickname, message_count), 0)current_time = time.time()if current_time - last_notification_time > 15:# 依次发送notification_title = f"来自 {nickname} 的 {message_count} 条消息"notification_message = f"{last_xiaoxi.Name}"notification.notify(title=notification_title,message=notification_message,app_name="WeChat")# 更新日志notification_history[(nickname, message_count)] = current_timeif __name__ == "__main__":try:while True:check_wechat_messages()time.sleep(2)  #2秒检测一次UI组件except KeyboardInterrupt:print("程序退出~")except Exception as e:print(f"程序执行出现了问题: {str(e)}")

代码解析:

以上代码使用 uiautomation 实时获取微信聊天列表的消息状态,一旦有消息发过来,就会获取到发送人的微信昵称以及发送的消息内容、消息个数。

每2秒获取一次UI控件的内容,实测挂在后台对CPU和内存占用并无明显影响,结合Python uiautomation的各种用法,可以做成自动回复的功能。使用这款软件,可以获取到微信电脑版大部分控件的内容。例如:微信聊天列表、群名称、好友微信昵称、群人数、微信号等。 

还可以获取到群内的每一条聊天内容,获取到你跟好友的聊天记录。 

只要 UISpy.exe 可获取到的控件内容,那么你用 Python就可以获取到。

拓展

还可以用来做收款监控。将【微信收款助手】这个公众号单独窗口出来,然后监控这个窗口。

妥妥的实现了一个PC收款监控。可以用来做收款码的支付回调。

import uiautomation as auto
import re
import timedef get_children_at_depth(control, target_depth, current_depth=0):children = control.GetChildren()result = []for child in children:if current_depth == target_depth:result.append(child)else:result.extend(get_children_at_depth(child, target_depth, current_depth + 1))return resultdef process_last_child_information(previous_info):weixin = auto.WindowControl(Name="微信收款助手", ClassName="ChatWnd")xiaoxi = weixin.ListControl(Name="消息")target_depth = 5depth_5_children = get_children_at_depth(xiaoxi, target_depth)# 正则表达式模式pattern = r'收款到账通知(\d+月\d+日 \d+:\d+)收款金额¥([0-9.]+)汇总'last_child = Nonefor child in depth_5_children:match = re.search(pattern, child.Name)if match:last_child = child  # 保存最后一条子控件的引用# 在循环结束后,提取最后一条子控件的信息if last_child:match = re.search(pattern, last_child.Name)if match:date_time = match.group(1)amount = match.group(2)# 监听下一笔if (date_time, amount) != previous_info:print("收款回调:")print(date_time)print("金额:", amount)print("正在等待下一笔...")print("----------")previous_info = (date_time, amount)return previous_info# 循环
previous_info = Nonewhile True:previous_info = process_last_child_information(previous_info)# 每2秒执行一次循环time.sleep(2)

请勿使用这种技术用于非法行为,仅供大家开发一写小工具自己用。

如果使用这种技术来进行违法行为所带来的责任自行负责,与工具、教程作者、发布的平台无关。

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

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

相关文章

36 mysql 主键冲突 和 唯一索引冲突

前言 我们这里 来看一下 我们经常碰到的 "duplicate key xxx" 测试表结构如下 CREATE TABLE tz_test (id int(11) unsigned NOT NULL AUTO_INCREMENT,field1 varchar(128) DEFAULT NULL,PRIMARY KEY (id) USING BTREE,KEY field1 (field1) USING BTREE ) ENGINEI…

C++知识点总结(6):高精度乘法

一、高精度数 低精度数 1. 输入两个数字 char a_str[1005] {}; long long b; cin >> a_str >> b; 2. 将高精度数转换为整型 int a[1005] {}; int len_a strlen(a_str); for (int i 0; i < len_a-1; i) {a[len_a-i-1] a_str[i] - 48; } 3. 计算 int …

C++之set/multise容器

C之set/multise容器 set基本概念 set构造和赋值 #include <iostream> #include<set> using namespace std;void PrintfSet(set<int>&s) {for(set<int>::iterator it s.begin();it ! s.end();it){cout<<*it<<" ";}cout&l…

解决/usr/lib/libstdc++.so.6: version `GLIBCXX_3.x.x‘ not found问题

目录 1、查找缺少库版本2、动态库版本与gcc版本对应关系3、查找 libstdc.so.6.0.x 库文件4、如果libstdc.so.6.0.21库文件已存在&#xff0c;则按照下面的步骤创建软链接即可4.1 拷贝、软连接4.2验证新的 libstdc.so.6.0.21 库文件是否生效 5、如果libstdc.so.6.0.21库文件不存…

Web前端—移动Web第二天(空间转换、动画、综合案例:全名出游)

版本说明 当前版本号[20231118]。 版本修改说明20231118初版 目录 文章目录 版本说明目录移动 Web 第二天01-空间转换空间转换简介平移视距旋转左手法则rotate3d-了解立体呈现案例-3d导航缩放 02-动画动画实现步骤animation复合属性animation拆分写法案例-走马灯精灵动画多组…

x程无忧sign逆向分析

x程无忧sign逆向分析&#xff1a; 详情页sign&#xff1a; 详情页网站&#xff1a; import base64 # 解码 result base64.b64decode(aHR0cHM6Ly9qb2JzLjUxam9iLmNvbS9ndWFuZ3pob3UvMTUxODU1MTYyLmh0bWw/cz1zb3Vfc291X3NvdWxiJnQ9MF8wJnJlcT0zODQ4NGQxMzc2Zjc4MDY2M2Y1MGY2Y…

数位和相等数对的最大和【教3妹学编程-算法题】数位和相等数对的最大和

3妹&#xff1a;2哥&#xff0c;你有没有看到新闻“18岁父亲为4岁儿子落户现身亲子鉴定” 2哥 : 啥&#xff1f;18岁就当爹啦&#xff1f; 3妹&#xff1a;确切的说是14岁好吧。 2哥 : 哎&#xff0c;想我30了&#xff0c; 还是个单身狗。 3妹&#xff1a;别急啊&#xff0c; 2…

Git命令总结-常用-后续使用频繁的再添加~

Git命令总结-常用 久了不用&#xff0c;有些时候老是会忘记一些命令&#xff0c;多的都记录一下&#xff0c;方便查找 git init 初始化一个Git仓库&#xff0c;执行完git init命令后&#xff0c;会生成一个**.git**目录&#xff0c;该目录包含了资源数据&#xff0c;且只会在…

linux版:TensorRT安装教程

首先安装cuda和cudnn 查看安装的cuda版本 nvidia-smi查看cuda电脑的版本&#xff0c;我的是11.8版本的 nvcc -V查看cudnn版本&#xff0c;在cuda/cuda118/include路径下 cat cudnn_version.h | grep CUDNN_MAJOR -A 2下载TensorRT8.5 GA 下载地址&#xff1a;https://deve…

安装银河麒麟linux系统docker(docker-compose)环境,注意事项(一定能解决,有环境资源)

1:安装docker环境必须使用麒麟的版本如下 2:使用docker-compse up -d启动容器遇到的文件 故障1:如果运行docker-compose up 报“Cannot create redo log files because data files are corrupt or the database was not shut down cleanly after creating the data files”…

Mysql -常见函数

目录 字符串函数 数值函数 日期函数 流程函数 字符串函数 -- 拼接 SELECT CONCAT(Hello, World); -- 小写 SELECT LOWER(Hello); -- 大写 SELECT UPPER(Hello); -- 左填充 SELECT LPAD(01, 5, -); -- 右填充 SELECT RPAD(01, 5, -); -- 去除空格 SELECT TRIM( Hello World )…

Docker安装Zookeeper

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…