当前位置: 首页 > news >正文

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

前言

接到了一个需求:现微信有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.py

import time
import uiautomation as auto

wx_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.🎈🎈

相关文章:

  • VAPS XT开发入门教程07:表元素(TableElements)介绍
  • 一文带你了解电感的5大损耗
  • C语言for循环必备练习题
  • Optimization of DQN
  • 猿创征文|微软出品效率神器PowerToys,太实用了
  • Arduino框架下ESP32/8266使用PROGMEM功能将数据存储到flash中的使用规范
  • 并查集(路径压缩)
  • 防火墙实验二——实现域间、域内双向NAT、双机热备实验
  • 【Django】REST_Framework框架——视图集ViewSet和ModelViewSet源码解析
  • 如何对SAP数据库表进行增删改查操作(3)
  • Spring-06 Xml和注解方式配置Aop
  • 同步请求和异步请求(利用axios)
  • 猿创征文|瑞吉外卖——移动端_笔记
  • SpringBoot异常处理——异常显示的页面
  • 高等数学二从零开始学习的总结笔记(持续更新)
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 2019.2.20 c++ 知识梳理
  • Angular Elements 及其运作原理
  • egg(89)--egg之redis的发布和订阅
  • Java的Interrupt与线程中断
  • Leetcode 27 Remove Element
  • quasar-framework cnodejs社区
  • REST架构的思考
  • Vue2.x学习三:事件处理生命周期钩子
  • Webpack 4 学习01(基础配置)
  • 从0实现一个tiny react(三)生命周期
  • 从零开始学习部署
  • 面试总结JavaScript篇
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 实习面试笔记
  • 一个JAVA程序员成长之路分享
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • ###STL(标准模板库)
  • (C语言)fgets与fputs函数详解
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (转)JAVA中的堆栈
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Core 项目指定SDK版本
  • .net mvc 获取url中controller和action
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • @Transaction注解失效的几种场景(附有示例代码)
  • [.net]官方水晶报表的使用以演示下载
  • [2023-年度总结]凡是过往,皆为序章
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [AAuto]给百宝箱增加娱乐功能