【uiautomation】获取微信好友名单,可指定标签 全部

news/2024/4/29 23:49:11/文章来源:https://blog.csdn.net/weixin_45081575/article/details/126806657

前言

接到了一个需求:现微信有8000+好友,需要给所有好友发送一则一样的消息。网上搜索一番后,发现uiautomation 可以解决该需求,遂有此文。这是第一篇,获取全部好友

代码在文章末尾,自取~
微信群发消息链接https://github.com/Frica01/Wechat_mass_msg


知识点📖

知识点链接
Microsoft 的 uiautomationhttps://docs.microsoft.com/zh-cn/dotnet/framework/ui-automation/ui-automation-overview
Python 的 uiautomationhttps://github.com/yinkaisheng/Python-UIAutomation-for-Windows
微信群发消息 GitHub链接https://github.com/Frica01/Wechat_mass_msg

代码实现

Windows系统微信客户端

这里使用了一个测试的微信,全部好友为 354,标签为高中同学的好友为 68,下面用代码去获取它们!

在这里插入图片描述

代码运行如下:

获取标签为高中同学的名单如下

  • 在这里插入图片描述

获取全部好友:

  • 有两个好友是重名的,去重后就会了一个人(后面再优化重名这个问题
    在这里插入图片描述

完整代码

# -*- coding: utf-8 -*-
# @Author : Frica01
# @Time   : 2022-09-10 15:39
# @Name   : wechat_operation.pyimport time
import uiautomation as autowx_window = auto.WindowControl(Name='微信', ClassName='WeChatMainWndForPC')def get_friend_list(tag: str = None, num: int = 10) -> list:"""获取微好友名称.Args:tag(str): 可选参数,如不指定,则获取所有好友num(int): 可选参数,如不指定,只获取10页好友Returns:list"""def click_tag():"""点击标签"""contacts_window.ButtonControl(Name="标签").Click()auto.SendKeys(text='{Alt}{Ctrl}w')  # 快捷键唤醒微信# 点击 通讯录管理wx_window.ButtonControl(Name="通讯录").Click()wx_window.ListControl(Name="联系人").ButtonControl(Name="通讯录管理").Click()contacts_window = auto.GetForegroundControl()  # 切换到通讯录管理,相当于切换到弹出来的页面if tag:click_tag()  # 点击标签contacts_window.PaneControl(Name=tag).Click()time.sleep(0.3)click_tag()  # 关闭标签# 获取滑动模式scroll = contacts_window.ListControl().GetScrollPattern()assert scroll, "没有可滑动对象"name_list = list()rate: int = int(float(102000 / num))  # 根据输入的num计算滑动的步长for pct in range(0, 102000, rate):  # range不支持float,不导入numpy库,采取迂回这的方式# 每次滑动一点点,-1代表不用滑动scroll.SetScrollPercent(horizontalPercent=-1, verticalPercent=pct / 100000)for name_node in contacts_window.ListControl().GetChildren():  # 获取当前页面的 列表 -> 子节点nick_name = name_node.TextControl().Name  # 用户名remark_name = name_node.ButtonControl(foundIndex=2).Name  # 用户备注名,索引1会错位,索引2是备注名,索引3是标签名name_list.append(remark_name if remark_name else nick_name)contacts_window.SendKey(auto.SpecialKeyNames['ESC'])  # 结束时候关闭 "通讯录管理" 窗口return list(set(name_list))  # 简单去重,但是存在误判(如果存在同名的好友

后话

如果看不懂代码,可以在下方留言~
see you.🎈🎈

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

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

相关文章

一个画廊的GIF动画动作英雄从80年代和90年代

你还记得那些80年代和90年代初的动作英雄吗?比如查克诺里斯、史蒂文西格尔、西尔维斯特史泰龙、让克劳德范达姆,当然还有阿诺德施瓦辛格?意大利天才设计师DavideMazuchin&;郭美雄创建了一个图文并茂的GIF画廊,名为“过去的动作英雄”,以纪念那些年轻时的经典英雄。以…

不同vlan之间实现通信

目录: 1、单臂路由实现不同vlan间通信的原理 2、单臂路由的缺陷 3、单臂路由的配置 4、三层交换 不同vlan之间实现通信 单臂路由链路类型:交换机连接主机的端口位为access链路交换机连接路由器的的端口为trunk链路子接口:路由器的物理接口可以被划分成多个逻辑接口每个子接口…

【云原生】Kubernetes CRD 详解(Custom Resource Definition)

文章目录一、概述二、定制资源1)定制资源 和 定制控制器2)定制控制器3)Operator 介绍1、Operator Framework2、Operator 安装3、安装 Operator SDK4、Operator 简单使用4)Kubernetes API 聚合层5)声明式 APIs6&#xf…

HTML 快速入门

HTML代码是“标签化”的代码,把一个HTML文件视为一个文档,文档中有很多的标签,每一个标签也可以称为一个元素,同时每一个元素也对应一个对象,对象中有属性和方法。HTML的标签除了部分标签外,其他的都是成对…

易网防伪防窜货溯源管理系统源码

防伪防窜货和溯源系统更好用更易用,系统由PHPmysql开发,安全稳定。系统以防伪码(溯源码)为中心,可非常方便的为防伪码赋值产品信息,溯源信息。是建立防伪防窜货和溯源追踪系统的不二选择。 系统功能介绍: 一、防伪码管…

【RuoYi-Vue-Plus】学习笔记 40 - Validator(一)校验器对 Model 属性校验调用流程分析

文章目录前言参考目录框架集成1、Maven2、校验框架配置类 ValidatorConfig3、测试方法4、接口测试4.1、校验失败(参数为 null)4.2、校验成功(参数不为 null)执行流程分析InvocableHandlerMethod#invokeForRequestInvocableHandler…

来自邦卡的神奇扁平超级英雄插图

平面设计趋势正在相当大程度上动摇平面设计行业的各个方面。我们正在进入一个简单和最低限度的沟通模式的新时代,在这个时代中,平面设计似乎以最好的方式提供。 受平面设计形式的启发,法国平面设计师邦卡采用了相同的方法,创作了一系列简约、平面的超级英雄插图。这些插图涵…

自制操作系统日志——第二十二天

自制操作系统日志——第二十二天 今天,我们将继续再完善一下保护操作系统的内容,以及进一步的利用c语言显示字符串! 文章目录自制操作系统日志——第二十二天一、保护操作系统3手动强制关闭应用程序二、用c语言显示字符串API 显示窗口总结一…

vivado使用方法(初级)

文章目录1 创建新工程1.1 工程创建1.2 新建Verilog文件1.3 仿真参考1 创建新工程 1.1 工程创建 1、首先打开Vavido软件,点击Creat Project或者在File——>Project——>New里面进行新工程的创建 2、然后在弹出的界面上点击Next进入下一个界面进行项目的命名…

全站最简单 “数据滚动可视化大屏” 【JS基础拿来即用】

源码获取方式: 数据滚动大屏源码,原生js实现超级简单-Javascript文档类资源-CSDN下载原生js实现的数据滚动大屏案例,实现应该是全网最简单的,拿来直接使用即可,没有会员的小伙伴去我文章主更多下载资源、学习资料请访问…

基于Python实现的遗传算法求TSP问题

遗传算法求TSP问题 目录 人工智能第四次实验报告 1 遗传算法求TSP问题 1 一 、问题背景 1 1.1 遗传算法简介 1 1.2 遗传算法基本要素 2 1.3 遗传算法一般步骤 2 二 、程序说明 3 2.3 选择初始群体 4 2.4 适应度函数 4 2.5 遗传操作 4 2.6 迭代过程 4 三 、程序测试 5 3.1 求解…

Vue3+elementplus搭建通用管理系统实例七:通用表格实现上

一、本章内容 使用配置的方式实现表格的界面的自动生成、自动解析实体配置信息,并生成表格列、筛选项等功能,完整课程地址 二、效果预览 三、开发视频

动手实现深度学习(12): 卷积层的实现

9.1 卷积层的运算 传送门: https://www.cnblogs.com/greentomlee/p/12314064.html github: Leezhen2014: https://github.com/Leezhen2014/python_deep_learning 卷积的forward 卷积的计算过程网上的资料已经做够好了,没必要自己再写一遍。只把资料搬运到这里: http://deepl…

【进击的JavaScript|高薪面试必看】JS基础-作用域和闭包

六年代码两茫茫,不思量,自难忘 6年资深前端主管一枚,只分享技术干货,项目实战经验,面试指导 关注博主不迷路~ 本系列文章是博主精心整理的面试热点问题,吸收了大量的技术博客与面试文章,总结多年…

Java毕设项目——网上宠物店管理系统(java+SSM+Maven+Mysql+Jsp)

文末获取源码 开发语言:Java 框架:SSM 技术:Jsp JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包&#xff1a…

收银台——Web自动化测试

目录 一,收银台项目的主要功能: 二,Web自动化测试 一,Web自动化测试,设计测试用例 二,编写测试用例代码 三,测试结果: 四,总结: 一,收银台项…

JVM监控:JMX组件与底层原理

JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架 ,从Java5.0开始引入到标准Java技术平台中。JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。 其实JMX也可以看作一个框架&a…

一建报名重大变动 部分专业考生2022年不能报名一级建造师考试?

2022年度一级建造师资格考试报名证明事项实行告知承诺制,应试人员须通过中国人事考试网的全国专业技术人员资格考试报名服务平台进行网上注册、报名和缴费。 云南报名时间:2022年9月14日—9月21日;缴费截止时间:9月14日—9月23日…

【Android】App开发-控件篇

App开发是一个工作量比较大的项目,要学习App开发首先我们要先去学习手机中的各类工具和信息是怎么运行的,我们可以使用哪些工具来对手机进行设置。这里我采用的开发工具是Android studio。 目录 Textview控件 文本框控件: 阴影/模糊度控件…

第12章 软件测试基础 12.1-软件测试 12.2-验证与确认 12.3-软件缺陷

目录 一、软件测试基础主要内容 二、软件测试 1、软件测试的定义 2、软件测试的对象 3、软件测试的目的 4、考点 (1)软件测试的目的 (2)软件测试的对象 三、验证与确认 1、验证(Verification) 2、确认&…