当前位置:

首页 > 编程开发 > 怎么用Python脚本实现电脑唤醒后自动拍照并截屏发邮件通知

怎么用Python脚本实现电脑唤醒后自动拍照并截屏发邮件通知

背景背景是这样的,我的家里台式机常年休眠,并配置了WakeOnLan(WOL)方便远程唤醒并使用.但是我发现,偶尔台式机会被其他情况唤醒,这时候我并不知道,结果白白运行了好几天,浪费了很多电.所以我的需求是这样的:电脑唤醒后(可能是开机,有可能是从休眠状态唤醒),自动做如下几件事:摄像头拍照(判断是不是有人在使用)屏幕截图(判断是不是有人在使用)生成一封邮件,告诉我「电脑已启动」并附上拍照和截图;发送到我的邮箱.具体实现️摄像头拍照概述:通过opencv-python包实现.具体的包名为:opencv-p

本文目录

      背景

      背景是这样的, 我的家里台式机常年 休眠, 并配置了 Wake On Lan (WOL) 方便远程唤醒并使用.

      但是我发现, 偶尔台式机会被其他情况唤醒, 这时候我并不知道, 结果白白运行了好几天, 浪费了很多电.

      所以我的需求是这样的:

      电脑唤醒后(可能是开机, 有可能是从休眠状态唤醒), 自动做如下几件事:

      • 摄像头拍照(判断是不是有人在使用)

      • 屏幕截图(判断是不是有人在使用)

      • 生成一封邮件, 告诉我「电脑已启动」并附上拍照和截图;

      • 发送到我的邮箱.

      具体实现

      ️ 摄像头拍照

      概述:

      通过 opencv-python 包实现.

      具体的包名为: opencv-python

      依赖 numpy

      所以安装命令为:

      python -m pip install numpy
      python -m pip install opencv-python

      然后导入语句为: import cv2

      源码如下:

      # 打开摄像头并拍照
      cap = cv2.VideoCapture(0)  # 0 表示打开 PC 的内置摄像头(若参数是视频文件路径则打开视频)
      #  按帧读取图片或视频
      # ret,frame 是 cap.read() 方法的两个返回值。
      # 其中 ret 是布尔值,如果读取帧是正确的则返回 True,如果文件读取到结尾,它的返回值就为 False。
      # frame 就是每一帧的图像,是个三维矩阵。
      ret, frame = cap.read()  # 按帧读取图片
      cv2.imwrite('p1.jpg', frame)  # 保存图像
      cap.release()  # 释放(关闭)摄像头

      屏幕截图

      概述:

      通过 pyautogui 包实现.

      pyautogui 是比较简单的,但是不能指定获取程序的窗口,因此窗口也不能遮挡,不过可以指定截屏的位置,0.04s 一张截图,比 PyQt 稍慢一点,但也很快了。

      import pyautogui
      import cv2
      
      
      # 截图
      screen_shot = pyautogui.screenshot()
      screen_shot.save('screenshot.png')

      写邮件

      概述:

      通过 email 包实现.

      MIMEMultipart 类型

      MIME 邮件中各种不同类型的内容是分段存储的,各个段的排列方式、位置信息都通过 Content-Type 域的 multipart 类型来定义。 multipart 类型主要有三种子类型:

      • mixed : 附件

      • alternative : 纯文本和超文本内容

      • related :内嵌资源. 比如:在发送 html 格式的邮件内容时,可能使用图像作为 html 的背景,html 文本会被存储在 alternative 段中,而作为背景的图像则会存储在 related 类型定义的段中

      具体源码如下:

      from email.mime.multipart import MIMEMultipart
      from email.mime.text import MIMEText
      from email.mime.image import MIMEImage
      
      
      sender = 'admin@example.com'  # 发件人
      receivers = 'admin@example.com'  # 收件人
      pw = 'p@ssw0rd'  # 三方客户端登录邮箱授权码
      subject = '电脑已启动拍照并发送'  # 邮件主题
      text = '您好,您的电脑已开机,并拍摄了如下照片:'  # 邮件正文
      
      msg = MIMEMultipart('mixed')  # 定义含有附件类型的邮件
      msg['Subject'] = subject  # 邮件主题
      msg['From'] = sender  # 发件人
      msg['To'] = receivers  # 收件人
      # MIMEText三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
      # 构造一个文本邮件对象, plain 原格式输出; html html格式输出
      text = MIMEText(text, 'plain', 'utf-8')
      msg.attach(text)  # 将文本内容添加到邮件中
      
      for i in ('p1.jpg', 'screenshot.png'):
          sendImg = open(i, 'rb').read()  # 读取刚才的图片
          img = MIMEImage(sendImg)  # 构造一个图片附件对象
          # 指定下载的文件类型为:附件, 并加上文件名
          img['Content-Disposition'] = 'attachment; filename={}'.format(i)
          msg.attach(img)  # 将附件添加到邮件中
      
      msg_tsr = msg.as_string()  # 将msg对象变为str

      ️ 发邮件

      概述:

      通过 smtplib 包实现.

      源码如下:

      import smtplib
      
      
      # 发送邮件
      try:
          smtp = smtplib.SMTP()  # 定义一个SMTP(传输协议)对象
          smtp.connect('smtp.example.com', 25)  # 连接到邮件发送服务器,默认25端口
          smtp.login(sender, pw)  # 使用发件人邮件及授权码登陆
          smtp.sendmail(sender, receivers, msg_tsr)  # 发送邮件
          smtp.quit()  # 关闭邮箱,退出登陆
      except Exception as e:
          print('\033[31;1m出错了:%s\033[0m' % (e))
      else:
          print('邮件发送成功!')

      台式机唤醒后触发 python 脚本

      Windows 脚本

      Windows bat 脚本如下:

      @echo off
      timeout /T 15 /NOBREAK # sleep 15s
      cd /d D:\scripts\auto_send_email
      python auto_email.py  # 执行py文件

      任务计划程序

      进入 计算机管理 -> 系统工具 -> 任务计划程序. 添加如下任务计划:

      • 安全选项:

        • 勾选: 不管用户是否登录都要运行

        • 勾选: 使用最高权限运行

      • 触发器:

        • 发生事件时

        • 日志: 系统

        • 源: Power-Troubleshooter

        • 事件 ID: 1

      • 操作: 启动程序: D:\scripts\auto_email.bat

      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发 Python
      相关文章 更多
      python删除一个列表里的重复元素的方法与代码示例
      python删除一个列表里的重复元素的方法与代码示例

      学习如何使用Python高效删除列表中的重复元素。本文提供5种常见方法的代码示例,涵盖保持顺序与不保持顺序的场景,适合初学者和进阶开发者参考。

      Python写接口的步骤及完整代码示例
      Python写接口的步骤及完整代码示例

      详细讲解使用Python编写Web接口的核心步骤与完整代码示例,涵盖环境准备、路由定义、数据校验、服务启动及调试测试方法。

      codex怎么读取word文档及docx文件操作教程
      codex怎么读取word文档及docx文件操作教程

      介绍如何利用编程工具读取和解析Word文档(docx格式),涵盖基础文本提取代码示例、结构化数据处理逻辑,以及处理复杂排版时的技术局限与替代方案。

      怎么在Python中调用C语言代码提升性能
      怎么在Python中调用C语言代码提升性能

      详细讲解在Python中调用C语言代码提升性能的完整实践指南,包含原理分析、编译步骤、ctypes与CFFI具体实现、性能对比及常见陷阱。

      Python与C语言的性能差异及底层原理
      Python与C语言的性能差异及底层原理

      深入解析Python与C语言在执行效率上的数量级差异,从编译机制、变量内存布局、动态类型推断到GIL锁,系统阐明底层核心原理。

      Python和C语言哪个更适合编程入门
      Python和C语言哪个更适合编程入门

      客观对比Python与C语言在心智负担、底层机制与学习反馈上的核心差异,提供清晰有据的选择标准与切实的入门学习路径。

      selenium上传文件教程本地文件路径设置方法
      selenium上传文件教程本地文件路径设置方法

      深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

      针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

      langgraph python guide中文入门教程详解
      langgraph python guide中文入门教程详解

      本篇LangGraph Python中文入门教程详解,系统梳理StateGraph状态机定义、节点编写、边与条件路由、检查点持久化(MemorySaver)等核心机制,提供从环境安装到完整循环智能体构建的代码示例与实操指导。

      免费漫蛙manwa官网入口
      免费漫蛙manwa官网入口

      漫蛙(Manwa):一个漫画爱好者的宝藏阅读平台 说起在线阅读漫画,漫蛙(Manwa)这个名字,在爱好者圈子里可谓是颇有分量。它能在众多同类平台里迅速占据一席之地,靠的可不是运气。海量的资源库和以用户为中心的设计,让它成功吸引了从新手到资深漫迷的广泛群体。无论是当下最火的日韩新番,还是那些承载着回忆

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。