
利用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脚本示例,实现每分钟截图一次,并将截图发送到指定企业微信群。
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分钟将屏幕截图与企业微信通知结合,实现了低成本、高效率的自动化监控系统。通过调整截图间隔和监控场景,应用于运维、数据分析、测试等场景。使用自动化工具可更专注于核心业务,及时响应异常状态,提升整体工作效率。
“无他,惟手熟尔”!有需要的用起来!更多Python阅读在首页。
本文分享自 Nicholas与Pypi 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!