2025年4月21日 星期一 乙巳(蛇)年 正月廿二 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

Python 企业微信群推送消息

时间:04-01来源:作者:点击数:47

方法一,操控企业微信发送消息,条件:需要登录企业微信并置顶群聊

方法二,通过企业微信机器人发送消息,可以不用登录企业微信(推荐)

方法一代码如下:

  • import os
  • import time
  • import win32gui
  • import win32con
  • import win32api
  • import win32clipboard
  • import pyautogui as pag
  • from win32gui import IsWindow, IsWindowEnabled, IsWindowVisible, GetWindowText, EnumWindows
  • class PaySend:
  • """
  • 付款申请,企业微信群发送消息
  • """
  • _we_are_one = {}
  • is_run = False
  • def __new__(cls, *args, **kwargs):
  • """ 共享模式一 """
  • self = object.__new__(cls, *args, **kwargs)
  • self.__dict__ = cls._we_are_one
  • return self
  • def get_ct(self):
  • """ 获取所有Windows打开的窗体 """
  • titles = set()
  • def foo(hwnd, mouse):
  • # 去掉下面这句就能获取所有,但是我不需要那么多
  • if IsWindow(hwnd) and IsWindowEnabled(hwnd) and IsWindowVisible(hwnd):
  • titles.add(GetWindowText(hwnd))
  • EnumWindows(foo, 0)
  • return titles
  • def sbdj(self, x, y, enter=False, txt=''):
  • """ 操控剪贴板粘贴信息并发送 """
  • win32api.SetCursorPos([x, y]) # 为鼠标焦点设定一个位置
  • time.sleep(0.02)
  • win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
  • time.sleep(0.02)
  • win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
  • # win32api.keybd_event(0,0,win32con.KEYEVENTF_KEYUP,0)
  • if txt:
  • # 复制到剪切板
  • win32clipboard.OpenClipboard()
  • win32clipboard.EmptyClipboard()
  • win32clipboard.SetClipboardText(txt)
  • win32clipboard.CloseClipboard()
  • # 按下ctrl+v
  • win32api.keybd_event(0x11, 0, 0, 0)
  • win32api.keybd_event(0x56, 0, 0, 0)
  • win32api.keybd_event(0x56, 0, win32con.KEYEVENTF_KEYUP, 0)
  • win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
  • if enter:
  • # 按下回车键
  • time.sleep(0.05)
  • # win32api.keybd_event(32, 0, 0, 0)
  • # time.sleep(1)
  • # win32api.keybd_event(32, 0, win32con.KEYEVENTF_KEYUP, 0)
  • win32api.keybd_event(13, 0, 0, 0)
  • win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)
  • def send_mess(self, txt):
  • """ 发送消息 """
  • c = 1
  • while self.is_run: # 如果正在执行,等待
  • time.sleep(4)
  • c += 1
  • if c > 100:
  • break
  • self.is_run = True
  • try:
  • title = '企业微信'
  • # if title not in self.get_ct():
  • # os.startfile(r'D:\Program Files (x86)\WXWork\WXWork.exe')
  • # time.sleep(5)
  • x, y = pag.position() # 原来鼠标坐标
  • win = win32gui.FindWindow(None, title) # 获取标题名称为title的句柄
  • win2 = win32gui.GetForegroundWindow() # 获取当前窗口句柄
  • while win == 0: # 如果没有启动企业微信,启动
  • os.startfile(r'D:\Program Files (x86)\WXWork\WXWork.exe')
  • time.sleep(10)
  • win = win32gui.FindWindow(None, title)
  • c += 1
  • if c > 100:
  • break
  • # 如果title窗体正在作业,等待
  • while win == win2: # 当然当前正在企业微信会话工作,则等待
  • time.sleep(3)
  • win2 = win32gui.GetForegroundWindow() # 获取当前窗口句柄
  • c += 1
  • if c > 100:
  • break
  • win32gui.SetForegroundWindow(win) # 前台显示
  • win32gui.ShowWindow(win, win32con.SW_MAXIMIZE) # 最大化
  • self.sbdj(150, 82, enter=False, txt='')
  • time.sleep(0.02)
  • self.sbdj(468, 966, enter=True, txt=txt)
  • win32gui.CloseWindow(win) # 最小化
  • # 为鼠标还原到原来的坐标
  • win32api.SetCursorPos([x, y])
  • win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
  • win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
  • # win32gui.CloseWindow(win) # 最小化
  • except Exception as e:
  • print('执行错误')
  • finally:
  • self.is_run = False
  • if __name__ == '__main__':
  • sname = '群成员名称'
  • txt = f"@{sname} 您有新的消息"
  • pay = PaySend()
  • pay.send_mess(txt)

方法二代码如下:

  • import requests
  • def send_txt():
  • """ 文本消息 """
  • headers = {"Content-Type": "text/plain"}
  • send_url = "机器人的webhook地址"
  • send_data = {
  • "msgtype": "text", # 消息类型
  • "text": {
  • "content": "您有新的消息", # 文本内容,最长不超过2048个字节,必须是utf8编码
  • # "mentioned_list": ["@all"],
  • # userid的列表,提醒群中的指定成员(@某个成员),@all表示提醒所有人,如果开发者获取不到userid,可以使用mentioned_mobile_list
  • "mentioned_mobile_list": ["13812891678"] # 手机号列表,提醒手机号对应的群成员(@某个成员),@all表示提醒所有人
  • }
  • }
  • res = requests.post(url=send_url, headers=headers, json=send_data)
  • print(res.text)
  • def send_markdown():
  • """ markdown类型消息 """
  • headers = {"Content-Type": "text/plain"}
  • send_url = "机器人的webhook地址"
  • send_data = {
  • "msgtype": "markdown", # 消息类型,此时固定为markdown
  • "markdown": {
  • "content": "<@userid> [您有新的消息](http://www.xxx.com/info)",
  • }
  • }
  • res = requests.post(url=send_url, headers=headers, json=send_data)
  • print(res.text)
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门