python自动化之——获取钉钉群所有人的昵称

news2024/11/23 22:46:45

python自动化之——获取钉钉群所有人的昵称

楔子

精神小伙沙大柱入职了一家新公司,该公司所有成员都在钉钉群。

一天,沙大柱的上级沙小牛布置了任务:大柱,你把群里所有人的名称导出来吧,我不会操作。

大柱表示:没问题,你把我升级成管理员吧,我去后台看看怎么导出。

但大柱万万没想到,他的上级沙小牛还是不会。于是,大柱只好使出浑身功力,为领导无脑前行。

大柱先对钉钉进行了一波操作,发现钉钉群成员列表下方的"查看更多"可以展开更多成员,但可惜每次都只加载有限数量,而公司成员实在太多……

历经“大战”,大柱终于利用 python 自动化直接操纵钉钉软件,将所有成员展开,并复制出来。

alt

环境准备

  • windows 10
  • 钉钉 6.5.50
  • python3.11

python 依赖:

  • PyAutoGUI==0.9.53

PS.
pyautogui 是一个python库,能够操纵电脑,模拟鼠标、键盘的操作。
用这个库的目的是,解放双手,完成进入钉钉群,点击加载更多成员的一系列操作。

功能实现

alt

搜索钉钉群


class SearchGroupAction(object):

    def __init__(self, name, win: Win32Window):
        self.name = name
        self.win = win

    def run(self):
        w = self.win
        x = w.left + w.width / 2
        y = w.top + 10

        Clipboard.setText(self.name)
        pyautogui.click((x, y))
        time.sleep(0.5)
        Clipboard.paste()
        time.sleep(1)
        pyautogui.hotkey("enter")
        time.sleep(0.5)

疯狂点击“查看更多”按钮

class ParseMemberInfoAction(object):
    def __init__(self, win_ding: Win32Window):
        self.win = win_ding
        self.win_setting = None
        self.result_text = ''

    def run(self):
        w = self.win
        # 点击设置,访问设置对话框
        pyautogui.click((w.right - 35, w.top + 65))
        time.sleep(1)
        win_setting = pyautogui.getActiveWindow()
        pyautogui.hotkey('ctrl', 'a')
        pyautogui.hotkey('ctrl', 'c')
        text = Clipboard.getText()
        # 取消选中
        pyautogui.click(w.right - 100, w.top + 100)
        if '查看更多' in text:
            img = pyautogui.screenshot(
                region=(win_setting.left, win_setting.top, win_setting.width, win_setting.bottom))
            box: Box = pyautogui.locate(f'./res/chakangengduo.png', img)
            pyautogui.click(win_setting.left + box.left + box.width / 2, win_setting.top + box.top + box.height / 2)
            pyautogui.vscroll(-3000)

            time.sleep(0.5)
            # 滚动到底部后,此时”查看更多“的坐标固定了。下次点击可以不用再截图查坐标
            img = pyautogui.screenshot(
                region=(win_setting.left, win_setting.top, win_setting.width, win_setting.bottom))
            box: Box = pyautogui.locate(f'./res/chakangengduo.png', img)

            pyautogui.click(win_setting.left + box.left + box.width / 2, win_setting.top + box.top + box.height / 2)
            while True:
                pyautogui.hotkey('ctrl', 'a')
                pyautogui.hotkey('ctrl', 'c')
                text = Clipboard.getText()
                # 取消全选
                pyautogui.click()
                if '查看更多' not in text:
                    print(text)
                    self.result_text = text
                    return self
                pyautogui.click(win_setting.left + box.left + box.width / 2, win_setting.top + box.top + box.height / 2)
                pyautogui.vscroll(-3000)
                time.sleep(1)

        return self

执行:


def main():
    pywindow = pyautogui.getActiveWindow()
    w = pyautogui.getWindowsWithTitle('钉钉')[0]
    w.activate()
    w.maximize()
    print(w)

    SearchGroupAction("xxx群", w).run()
    pmc = ParseMemberInfoAction(w).run()

    time.sleep(3)
    # 恢复命令行界面
    pywindow.activate()

点击查看代码

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PyCharm中PIL/Pillow的安装】

🤵‍♂️ 个人主页老虎也淘气 个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏…

操作系统 - 进程

文章目录操作系统1.操作系统的定位2.进程2.1 PCB的一些属性2.3 进程调度相关属性 :本文小结操作系统 操作系统是一个软件   用途 :管理   1.对下 :管理硬键设备 2.对上 : 为软件提供稳定的运行环境 进一步来说 : 操作系统是软件…

多重背包问题

多重背包也是 0-1 背包的一个变式。与 0-1 背包的区别在于每种物品有ki个,而非一个。 一个很朴素的想法就是:把「每种物品选ki次」等价转换为「有ki个相同的物品,每个物品选一次」。这样就转换成了一个 0-1 背包模型,套用上文所述…

智慧民政解决方案-最新全套文件

智慧民政解决方案-最新全套文件一、建设背景二、建设思路三、建设方案四、获取 - 智慧民政全套最新解决方案合集一、建设背景 在城市信息化建设的大浪潮中,民政信息化建设关系就业、收入、教育、文体、健康、养老和社保等民间社会事务的管理与服务,在智…

Kettle运行Spoon.bat出现命令框然后闪退【BUG已解决】

文章目录项目场景:问题描述原因分析:解决方案:项目场景: 在内科大数据处理课程中,要求安装Kettle。 Kettle: Pentaho Data Integration以Java开发,支持跨平台运行,其特性包括&#…

【算法入门搜索法】走迷宫|单源最短路径1

✅作者简介:热爱后端语言的大学生,CSDN内容合伙人 ✨精品专栏:C面向对象 🔥系列专栏:算法百炼成神 文章目录🔥前言1、AB20 走迷宫1.1、解题思路1.2、代码实现与注释2、AB19 【模板】单源最短路12.1、单源最…

CMake中while/continue/break的使用

CMake中的while命令用于在条件为true时评估(evaluate)一组命令&#xff0c;其格式如下&#xff1a; while(<condition>)<commands> endwhile() 在while和匹配的endwhile之间的所有命令都被记录下来而不被调用。一旦评估了endwhile&#xff0c;只要<condition&g…

MIT 6.S081 Operating System Lecture4 (随意的笔记)

系列文章目录 文章目录系列文章目录xv6 中的内存页是如何分配的RISC-V 是多级页表对page table的理解xv6 中的内存页是如何分配的 在本课中&#xff0c;内存也相关源码路径为&#xff1a; kernel/kallo.c // Physical memory allocator, for user processes, // kernel stack…

uni-app入门:wxs基本使用

1.wxs相关介绍 2.wxs标签内嵌在wxml中使用 3.在.wxs文件中外联使用 4.wxs与JavaScript区别 1.wxs相关介绍wxs(weixin script),是小程序的一套脚本语言&#xff0c;结合 WXML&#xff0c;可以构建出页面的结构。可以编写在 wxml 文件中的 标签内&#xff0c;或以…

Spring 项目的创建和 “使用“

目录 1. 创建 Spring 项目 1.1 创键一个 Maven 项目【无需模板】 1.2 添加 Spring 依赖【Spring-context/Spring-beans】 1.3 创建一个启动类 2. 将对象存储到 Spring 中 2.1 创建一个 bean 对象 2.2 将 bean 注册到 Spring 中【使用 Spring 配置文件进行注册】 3. 从 …

【树莓派不吃灰】命令篇⑧ 校准树莓派时间

目录1. systemd-timesyncd1.1 systemd-timesyncd 客户端1.2 systemd-timesyncd 服务1.3 systemd-timesyncd 配置文件1.4 timedatectl命令2. 校准时间2.1 查看时间状态2.2 校准时区2.3 没有时钟同步服务器&#xff0c;手工设置时间2.3.1 禁止ntp自动同步2.3.2 设置时间2.3.3 设置…

敏感词检测库ToolGood.Words中IllegalWordsSearch类使用简介

C#开源敏感词检测库ToolGood.Words中的类IllegalWordsSearch为过滤非法词&#xff08;敏感词&#xff09;专用类&#xff0c;可设置跳字长度&#xff0c;支持全角转忽略大小、跳词、重复词、黑名单等功能&#xff0c;本文对照参考文献1&#xff0c;对该类的用法进行简要介绍。 …

k8s资源对象service-四层负载均衡详解

理论 工作原理如图: service的定义:是一组pod的逻辑组合,通过clusterIP和服务端口接收请求,并将这些请求代理至使用标签选择器来过滤符合条件的pod对象。 作用:服务发现和服务访问,为弹性变动且存在生命周期的pod对象提供了一个固定的访问接口。 service的代理类型:…

Vue动态切换class属性:数组法、对象法

需求&#xff1a;在style里创建好不同的属性&#xff0c;后期可以给标签动态绑定这些属性&#xff0c;也可以实现属性的切换方法&#xff1a;对象法、数组法事先创建好class属性&#xff1a; <style>.aa{}.bb{}.cc{} </style> 对象法&#xff1a; <body><…

矩阵(加速)。。。

我限定你在明天中午之前搞定这东西&#xff01;毕竟之前做过了欸。矩阵&#xff0c;一个看起来很神奇的东西&#xff0c;不过我不打算花太多的时间做这个&#xff0c;还是图论和数论好点儿&#xff0c;还要复习一下之前的数据结构和dp呢。那么先谈谈定义&#xff0c;定义一个矩…

kubernetes介绍与资源管理

#kubernetes介绍与资源管理 1应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个时代&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点&#xff1a;…

CMSC5713-IT项目管理之人力资源管理Human Resources Management

文章目录9.1. Introduction9.1.1. Motivation Theories9.1.2. Influence and Power9.1.3. Motivating Team9.2. Project Human Resource Management9.3. Human Resource Planning9.3.1. Project Organization Charts9.3.2. Responsibility Assignment Matrices9.3.2.1. RACI Ch…

锐捷BFD基础实验配置

目录 BFD与静态路由联动 BFD与静态路由联动&#xff08;单跳&#xff09; BFD与静态路由联动&#xff08;多跳&#xff09; BFD与动态路由联动 配置BFD与OSPF联动 配置BFD与BGP联动 BFD与静态路由联动 BFD联动静态路由注意事项 1、配置需要联动的静态路由时&#xff0c…

Java线程池

自定义线程池 1. 简介 1.1 引入原因 1. 一个任务过来&#xff0c;一个线程去做。如果每次过来都创建新线程&#xff0c;性能低且比较耗费内存 2. 线程数多于cpu核心&#xff0c;线程切换&#xff0c;要保存原来线程的状态&#xff0c;运行现在的线程&#xff0c;势必会更加耗…

idea创建spring boot工程及配置

目录 一、dea 创建spring boot工程 二、打包 三、启动配置文件 一、dea 创建spring boot工程 new project 选择Spring Initializr ,Type&#xff1a;选择Maven&#xff0c;Java 8, Packagin 选择Jar。然后点击next 添加依赖&#xff1a; 选择Sprint Boot版本&#xff0c;选…