首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 自动截取屏幕信息发送至企业微信群,自动化监控数据状态

Python 自动截取屏幕信息发送至企业微信群,自动化监控数据状态

作者头像
用户11081884
发布2026-07-20 18:51:54
发布2026-07-20 18:51:54
290
举报

利用Python实现自动屏幕截图,并将截图信息自动发送至企业微信群,从而构建一个高效的自动化监控系统,实时监控系统状态、业务数据或操作流程。如服务器状态监控、数据可视化跟踪、自动化测试记录等,帮助及时发现问题并快速响应。

使用场景

1、服务器与系统监控:运维团队需要实时监控服务器仪表板(如Grafana、Kibana等),通过定时截图并发送到企业微信群,确保关键指标(CPU使用率、内存占用等)异常时能立即通知相关人员。

2、业务数据监控:数据分析师或业务人员需跟踪每日数据报表或BI工具(如Tableau、Power BI)的图表变化。自动截图可捕捉数据波动,辅助决策。

3、自动化测试与调试:在自动化测试脚本运行过程中,截图错误页面或关键步骤,并发送到开发群,便于快速定位问题。

4、演示与培训记录:对于软件演示或培训过程,自动截图可生成操作记录,用于后续复盘或文档编写。

5、安全与合规审计:监控敏感操作(如财务系统登录、数据导出),截图存档并发送到审计群,满足合规要求。

实现原理

基于Python实现,核心步骤:

1、屏幕截图:使用PIL库的ImageGrab模块捕获屏幕内容。

2、文件处理:将截图保存为带时间戳的图片文件。

3、企业微信群集成:通过企业微信机器人的Webhook API,上传截图并发送消息。

4、定时控制:使用time模块实现循环截图和间隔控制。

企业微信机器人支持发送图片消息,但需先将图片上传至企业微信服务器获取media_id,再通过Webhook发送。本文代码将简化这一流程,直接使用上传API完成发送。

代码示例

以下是一个完整的Python脚本示例,实现每分钟截图一次,并将截图发送到指定企业微信群。

代码语言:javascript
复制
import requests
import json
import time
import os
from datetime import datetime
from PIL import ImageGrab


class WeChatMonitor:
    def __init__(self, webhook_url, screenshot_interval=60):
        """
        初始化监控器
        :param webhook_url: 企业微信群机器人的Webhook地址
        :param screenshot_interval: 截图间隔时间(秒),默认60秒
        """
        self.webhook_url = webhook_url
        self.interval = screenshot_interval
        self.screenshot_dir = "monitor_screenshots"
        # 创建截图保存目录
        if not os.path.exists(self.screenshot_dir):
            os.makedirs(self.screenshot_dir)


    def take_screenshot(self):
        """捕获屏幕截图并保存为时间戳命名的文件"""
        timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
        filename = f"screenshot_{timestamp}.jpg"
        filepath = os.path.join(self.screenshot_dir, filename)
        
        # 使用PIL截图
        screenshot = ImageGrab.grab()
        screenshot.save(filepath, "JPEG")
        print(f"截图已保存: {filepath}")
        return filepath


    def upload_to_wechat(self, image_path):
        """将图片上传到企业微信并获取media_id"""
        upload_url = " https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media "
        params = {
            "key": self.webhook_url.split("key=")[-1],  # 从Webhook URL提取key
            "type": "file"
        }
        with open(image_path, "rb") as f:
            files = {"media": f}
            response = requests.post(upload_url, params=params, files=files)
        if response.status_code == 200:
            result = response.json()
            return result.get("media_id")
        else:
            print(f"上传失败: {response.text}")
            return None


    def send_wechat_message(self, media_id, text="自动监控截图"):
        """通过Webhook发送图片消息到企业微信群"""
        message_data = {
            "msgtype": "image",
            "image": {
                "media_id": media_id
            },
            "text": {
                "content": text
            }
        }
        headers = {"Content-Type": "application/json"}
        response = requests.post(self.webhook_url, data=json.dumps(message_data), headers=headers)
        if response.status_code == 200:
            print("消息发送成功")
        else:
            print(f"发送失败: {response.text}")


    def start_monitoring(self, duration_minutes=60):
        """启动监控,持续运行指定分钟数"""
        total_seconds = duration_minutes * 60
        start_time = time.time()
        
        while time.time() - start_time < total_seconds:
            try:
                # 截图并发送
                screenshot_path = self.take_screenshot()
                media_id = self.upload_to_wechat(screenshot_path)
                if media_id:
                    self.send_wechat_message(media_id, f"监控时间: {datetime.now().strftime('%H:%M:%S')}")
                else:
                    print("图片上传失败,跳过发送")
            except Exception as e:
                print(f"执行错误: {e}")
            
            # 等待间隔时间
            time.sleep(self.interval)


if __name__ == "__main__":
    # 替换为你的企业微信群机器人Webhook URL
    WEBHOOK_URL = " https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY_HERE "
    
    monitor = WeChatMonitor(webhook_url=WEBHOOK_URL, screenshot_interval=60)  # 每60秒截图一次
    monitor.start_monitoring(duration_minutes=120)  # 运行120分钟

代码说明

  • 通过修改 screenshot_interval 参数,可调整截图频率(如每10秒一次用于高频监控)。
  • 包含异常捕获,避免因网络问题导致脚本中断。
  • 可根据实际场景修改功能,如截图前判断特定条件(如CPU阈值)再发送。

将屏幕截图与企业微信通知结合,实现了低成本、高效率的自动化监控系统。通过调整截图间隔和监控场景,应用于运维、数据分析、测试等场景。使用自动化工具可更专注于核心业务,及时响应异常状态,提升整体工作效率。

“无他,惟手熟尔”!有需要的用起来!更多Python阅读在首页

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用场景
  • 实现原理
  • 代码示例
    • 代码说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档