首页 > 其他分享 >部署监控公司电脑桌面并截图保存至阿里云OSS(定时功能)

部署监控公司电脑桌面并截图保存至阿里云OSS(定时功能)

时间:2024-06-18 17:37:12浏览次数:13  
标签:截图 OSS 电脑桌面 file import path now os

import socket
import uuid
import schedule
import datetime
import pyautogui
import logging
import oss2
import ctypes
import os
import time
import shutil

# 阿里云OSS配置信息
access_key_id = 'your_id'
access_key_secret = 'your_secret'
bucket_name = 'bucket_name'
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'

# 创建OSS认证
auth = oss2.Auth(access_key_id, access_key_secret)
# 创建OSS Bucket实例
bucket = oss2.Bucket(auth, endpoint, bucket_name)

# 日志和截图文件的存储目录在D盘
screenshots_folder = r"C:\MonitorService\Screenshots"
log_file_path = r"C:\MonitorService\monitor_service.log"

# 确保截图文件夹存在
if not os.path.exists(screenshots_folder):
    os.makedirs(screenshots_folder)

# 确保执行文件目录存在

if not os.path.exists('C:\Screenshots'):
    os.makedirs('C:\Screenshots')

# 设置文件夹隐藏属性
FILE_ATTRIBUTE_HIDDEN = 0x02
screenshots_folder = r"C:\MonitorService\Screenshots"
log_file_path = r"C:\MonitorService\monitor_service.log"
ctypes.windll.kernel32.SetFileAttributesW(screenshots_folder, FILE_ATTRIBUTE_HIDDEN)
ctypes.windll.kernel32.SetFileAttributesW(os.path.dirname(log_file_path), FILE_ATTRIBUTE_HIDDEN)

# 设置日志记录
logging.basicConfig(filename=log_file_path, level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')


def should_take_screenshot():
    """检查是否应该执行截图。"""
    now = datetime.datetime.now()
    # 周六和周日全天运行
    if now.weekday() >= 5:
        return True
    # 周一至周五晚上9点后运行
    # if now.weekday() < 5 and now.hour >= 21:
    if now.weekday() <= 5 or now.hour >= 20:
        return True
    return False


def get_mac_address():
    """获取本机的MAC地址。"""
    mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
    return "_".join([mac[e:e + 2] for e in range(0, 12, 2)])


def take_screenshot():
    """执行屏幕截图操作并确保文件已写入磁盘再进行上传。"""
    try:
        timestamp = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
        hostname = socket.gethostname()
        mac_address = get_mac_address()
        file_name = f'{hostname}_{mac_address}_{timestamp}.png'
        file_path = os.path.join(screenshots_folder, file_name)

        # 使用pyautogui进行截图
        screenshot = pyautogui.screenshot()
        screenshot.save(file_path)
        time.sleep(2)
        # 确保文件已存在且大小不为0
        if os.path.exists(file_path) and os.path.getsize(file_path) > 0:
            logging.info(f'保存截图: {file_path}')
            print(f'保存截图: {file_path}')
        else:
            raise Exception("截图文件未成功保存或文件大小为0")

        # 上传到OSS
        with open(file_path, 'rb') as fileobj:
            bucket.put_object(f'Screenshots/{file_name}', fileobj)
        logging.info(f'上传到OSS的截图: {file_name}')
        print(f'上传到OSS的截图: {file_name}')
    except Exception as e:
        logging.error(f'截图错误: {e}')
        print(f'截图错误: {e}')


def job():
    """定时执行的任务,截图并保存。"""
    if should_take_screenshot():
        logging.info('截图中...')
        print('截图中...')
        take_screenshot()
    else:
        logging.info('无法截图,因为现在不是截图时间。')
        print('无法截图,因为现在不是截图时间。')


# 定期清理日志
def clean_old_logs():
    now = time.time()
    log_folder = os.path.dirname(log_file_path)
    for filename in os.listdir(log_folder):
        file_path = os.path.join(log_folder, filename)
        if os.stat(file_path).st_mtime < now - 7 * 86400:  # 7 days
            if os.path.isfile(file_path):
                os.remove(file_path)
            elif os.path.isdir(file_path):
                shutil.rmtree(file_path)


# 定期清理日志
schedule.every().day.at("09:30").do(clean_old_logs)

# 设置调度任务
schedule.every(5).minutes.do(job)

# 主循环
while True:
    schedule.run_pending()
    time.sleep(1)

"""
 
项目逻辑:周一至周五晚上九点以后,周六、周日 对桌面进行截图。
如果有问题的分析处理逻辑:

测试及排错的流程 
1、如果提示文件无法保存则查看相应的文件夹的写入权限。
2、如果要测试,请把  if now.weekday() < 5 and now.hour >= 21  更为:if now.weekday() < 5

部署步骤:
1、pyinstaller --onefile --noconsole system-5-m.py   # 把文件打包成可执行文件
2、启动项的打开方式为:win+R  shell:common startup
"""

后记:由于业务需求才有了上面的代码。遂记之,以备以后查询!

标签:截图,OSS,电脑桌面,file,import,path,now,os
From: https://www.cnblogs.com/lyt263/p/18254765

相关文章

  • 《YOLOv5入门 + 改进涨点》专栏介绍 & 专栏目录 |目前已有40+篇内容,内含各种Head检测
    《YOLOv5入门+改进涨点》介绍&目录本专栏是博主精心设计的专门为了提升检测效果,希望改进YOLOv5并发表论文的同学们而设计。专栏的内容紧跟学术届的热点更新最新内容,紧跟YOLOv5的官方项目的实时更新。本专栏的内容是基于YOLOv5-6.1的版本进行改进专栏聚焦前沿方法,本专栏的......
  • 论文解读——EMNLP2023《Cross-lingual Prompting: Improving Zero-shot Chain-of-Tho
    一、研究背景  本研究聚焦于改进跨语言链式思考(Chain-of-Thought,CoT)推理,这是针对大型语言模型(LLMs)推理过程中的一种技术。传统上,链式思考通过引导模型按步骤生成推理路径,以提高推理任务的准确性。具体来说,零样本链式思考(zero-shotCoT)通过简单的提示,如“Let’sthinks......
  • F. Final Boss
    原题链接题解1.由于一回合可以使用多次技能,所以直接二分回合数即可2.回合数最多为\(4^{10}\)code#include<bits/stdc++.h>usingnamespacestd;#definelllonglonglla[200005],c[200005];llh,n;inlinevoidread(ll&x){x=0;llflag=1;char......
  • 没有登录微信就不会截图了?这个方法你一定要学会
    前言前段时间小白在指导小伙伴的时候,发现他在电脑没有登录微信的时候就不会截图了。这个可就难倒他了……所以他登录了个微信,然后截了张图,接着把微信退出了。这人可真是谨慎啊~所以,小伙伴在使用电脑的时候,有多少人知道不登录微信/QQ/钉钉等软件的情况下,如何使用电脑自带的快......
  • 从零手写实现 nginx-19-HTTP CORS(Cross-Origin Resource Sharing,跨源资源共享)介绍+解
    前言大家好,我是老马。很高兴遇到你。我们为java开发者实现了java版本的nginxhttps://github.com/houbb/nginx4j如果你想知道servlet如何处理的,可以参考我的另一个项目:手写从零实现简易版tomcatminicat手写nginx系列如果你对nginx原理感兴趣,可以阅读:从零......
  • 关于autoSSH保持连接的两种方法
    使用ssh端口转发功能进行内网穿透,但是经过的网络稍有不稳定就可能导致连接断开,所以考虑使用工具AutoSSH,按照默认使用还需要一个监听端口,考虑到安全尽量少开端口,是否可以不用,很多文章都提到了可以用ssh自身保持连接的方法,如下面这篇:第21篇:SSH隧道持久化配置-知乎其中......
  • [转]用autossh工具进行端口转发
    原文地址:用autossh工具进行端口转发|EscapeAutoSSH是一种用以对SSH登录进行安全地自动化的软件!比如我们在 host2 机器上面部署了很多服务,但是由于某种原因导致我们无法直接 ssh 访问该服务器已经其上服务的对应端口,但是 host3 服务器,既能够访问 host2 服务器,又......
  • 聊聊GLM-4-9B开源模型的微调loss计算
    概述Github官方地址:GLM-4网上已经有很多关于微调的文章,介绍各种方式下的使用,这里不会赘述。我个人比较关心的是微调时的loss计算逻辑,这点在很多的文章都不会有相关的描述,因为大多数人都是关心如何使用之类的应用层,而不是其具体的底层逻辑,当然咱也说不清太底层的计算。可了解其......
  • Linux系统通过CrossOver运行windows系统exe程序
    1.CrossOver下载下载网址:https://crossover.mairuan.com/?a_planid=462146305&a_unitid=9457631754&a_kw_enc_utf8=crossover+%E4%B8%8B%E8%BD%BD&a_creative=93751965498&cjtg=bdsem_cr_pp&bd_vid=11448931900093706309点击免费下载软件自动下载的安装包不是liunx需要的,需要下......
  • LearnDash+BuddyBoss:终极在线课程社区组合
    您是否希望使用WordPress建立在线课程社区?如果是这样,没有比LearnDash和BuddyBoss在线课程社区更好的组合了。使用这两款产品,您可以创建和销售在线课程、创建群组和讨论,并为您的学生提供整个社交网络,所有这些都无需离开您的网站。BuddyBoss无疑是创建基于社区的在线学习平......