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


    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    执行:

    
    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()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    点击查看代码

  • 相关阅读:
    angular:简单实现图片如果超过屏幕高度则滚动置顶;没超过则水平垂直居中
    MySQL 空间碎片详解
    【C基础篇】之数组与字符串
    圆角大杀器,使用滤镜构建圆角及波浪效果!
    文件夹名称中空格如何替换为符号
    南京大学:新时代数字化人才培养方案探讨
    2021年12月电子学会图形化一级编程题解析含答案:放学
    巧如范金,精比琢玉,一分钟高效打造精美详实的Go语言技术简历(Golang1.18)
    XSS-labs靶场实战(一)——第1-3关
    计算机毕业设计Java电影院售票系统(源码+系统+mysql数据库+lw文档)
  • 原文地址:https://blog.csdn.net/Mingyueyixi/article/details/127953254