当前位置: 首页 > news >正文

Flask设计网页截屏远程电脑桌面及切换运行程序界面

有没有一种办法可以让我通过网页就能够实时查看远程电脑的程序运行情况呢?为此,我想到了利用python的Flask制作一个网页,然后通过cpolar,转变成一个互联网的网页,方便随时了解电脑的程序运行情况,比如百度网盘下载多少文件了,python数据处理是否完成等等。

1.flask服务端:

# -*- coding: utf-8 -*-
"""
Created on Tue Jun 17 20:52:47 2025@author: YBK
"""from flask import Flask, render_template, send_file
import pyautogui
import os
import timeapp = Flask(__name__)@app.route('/')
def index():return render_template('jp.html')@app.route('/screenshot')
def take_screenshot():screenshot = pyautogui.screenshot()screenshot_path = os.path.join('static', 'screenshot.png')screenshot.save(screenshot_path)return send_file(screenshot_path, mimetype='image/png')@app.route('/switch_window')
def switch_window():pyautogui.hotkey('alt', 'tab')time.sleep(0.5)  # 等待窗口切换完成return 'OK'@app.route('/switch_window1')
def press_win_1():try:pyautogui.keyDown('win')time.sleep(0.1)  # 确保Win键按下pyautogui.press('1')pyautogui.keyUp('win')return 'OK'except Exception as e:print(f"操作失败: {str(e)}")return 'Err'@app.route('/switch_window2')
def press_win_2():try:pyautogui.keyDown('win')time.sleep(0.1)  # 确保Win键按下pyautogui.press('2')pyautogui.keyUp('win')return 'OK'except Exception as e:print(f"操作失败: {str(e)}")return 'Err'@app.route('/switch_window3')
def press_win_3():try:pyautogui.keyDown('win')time.sleep(0.1)  # 确保Win键按下pyautogui.press('3')pyautogui.keyUp('win')return 'OK'except Exception as e:print(f"操作失败: {str(e)}")return 'Err'@app.route('/switch_window4')
def press_win_4():try:pyautogui.keyDown('win')time.sleep(0.1)  # 确保Win键按下pyautogui.press('4')pyautogui.keyUp('win')return 'OK'except Exception as e:print(f"操作失败: {str(e)}")return 'Err'@app.route('/switch_window5')
def press_win_5():try:pyautogui.keyDown('win')time.sleep(0.1)  # 确保Win键按下pyautogui.press('5')pyautogui.keyUp('win')return 'OK'except Exception as e:print(f"操作失败: {str(e)}")return 'Err'@app.route('/switch_windowd')
def press_win_d():try:pyautogui.keyDown('win')time.sleep(0.1)  # 确保Win键按下pyautogui.press('d')pyautogui.keyUp('win')return 'OK'except Exception as e:print(f"操作失败: {str(e)}")return 'Err'@app.route('/switch_ct')
def switch_ct():pyautogui.hotkey('ctrl', 'tab')time.sleep(0.5)  # 等待窗口切换完成return 'OK'@app.route('/switch_csi')
def switch_csi():pyautogui.hotkey('ctrl', 'shift', 'i')time.sleep(0.5)  # 等待窗口切换完成return 'OK'
if __name__ == '__main__':app.run(host='127.0.0.1',debug=True,use_reloader=False)

2.放在templates的网页jp.html

<!DOCTYPE html>
<html>
<head><title>远程桌面控制</title><style>#image-container {width: 800px;height: 600px;border: 1px solid #ccc;margin: 20px auto;}#screenshot-img {max-width: 100%;max-height: 100%;}.button-container {text-align: center;margin: 20px;}button {padding: 10px 20px;margin: 0 10px;font-size: 16px;}</style>
</head>
<body><div class="button-container"><button id="screenshot-btn">截屏</button><button id="switch-btn">切换</button><button id="switch-btn1">Win+1</button><button id="switch-btn2">Win+2</button><button id="switch-btn3">Win+3</button><button id="switch-btn4">Win+4</button><button id="switch-btn5">Win+5</button><button id="switch-btnd">Win+D</button></div><div id="image-container"><img id="screenshot-img" src="" alt="截屏将显示在这里"></div><div class="button-container"><button id="switch-btnct">Ctrl+Tab</button><button id="switch-btncsi">Ctrl+Shift+I</button></div><script>document.getElementById('screenshot-btn').addEventListener('click', function() {fetch('/screenshot').then(response => response.blob()).then(blob => {const img = document.getElementById('screenshot-img');img.src = URL.createObjectURL(blob);});});document.getElementById('switch-btn').addEventListener('click', function() {fetch('/switch_window');});document.getElementById('switch-btn1').addEventListener('click', function() {fetch('/switch_window1');});document.getElementById('switch-btn2').addEventListener('click', function() {fetch('/switch_window2');});document.getElementById('switch-btn3').addEventListener('click', function() {fetch('/switch_window3');});document.getElementById('switch-btn4').addEventListener('click', function() {fetch('/switch_window4');});document.getElementById('switch-btn5').addEventListener('click', function() {fetch('/switch_window5');});document.getElementById('switch-btnd').addEventListener('click', function() {fetch('/switch_windowd');});document.getElementById('switch-btnct').addEventListener('click', function() {fetch('/switch_ct');});document.getElementById('switch-btncsi').addEventListener('click', function() {fetch('/switch_csi');});</script>
</body>
</html>

3.记得新建static文件夹在py程序的同个文件夹中。

4.使用cmd,运行cpolar http 5000

5.python提取cpolar公网地址,也就是4上面显示的网址,发送给你的微信。(用另外一个微信在服务器登录)

# -*- coding: utf-8 -*-
"""
Created on Sat Mar 22 11:17:27 2025@author: YBK
"""import requests
from bs4 import BeautifulSoup
import sys
import pyperclip
from wxauto import *
wx = WeChat()
who = '你的微信名'
# 登录网站并获取页面内容
def fetch_info_from_website(login_url, info_url, credentials, tunnel_name):with requests.Session() as session:try:# 获取登录页面以抓取csrf tokenlogin_page = session.get(login_url)login_page.raise_for_status() # 检查请求是否成功login_page_soup = BeautifulSoup(login_page.text, 'html.parser')# 提取csrf tokencsrf_token = login_page_soup.find('input', {'name': 'csrf_token'})['value']credentials['csrf_token'] = csrf_token# 登录print("登录中,请等待。")login_response = session.post(login_url, data=credentials)# 检查是否登录成功if login_response.status_code != 200 or login_response.url == login_url:print("登录失败,请检查您的凭据。")return []else:print("登录成功。")# 获取信息页面response = session.get(info_url)response.raise_for_status()# 解析页面soup = BeautifulSoup(response.text, 'html.parser')table = soup.find('table')if not table:print("未找到隧道列表,请检查对应设备的cpolar服务和网络连接。")return []links = [] # 用于存储找到的链接for row in table.find_all('tr')[1:]: # 跳过表头cells = row.find_all('td')if len(cells) > 1:tunnel = cells[0].get_text().strip()url_cell = row.find('a', href=True) # 直接在行中查找<a>标签if tunnel == tunnel_name and url_cell:links.append(url_cell['href']) # 添加匹配的链接print(f"找到隧道 {tunnel} 的链接: {url_cell['href']}")return linksexcept requests.RequestException as e:print(f"请求异常: {e}")except Exception as e:print(f"发生错误: {e}")
if __name__ == '__main__':login_url = "https://dashboard.cpolar.com/login"info_url = "https://dashboard.cpolar.com/status"credentials = {'login': '你的账号','password': '你的密码'}# 检查是否有命令行参数传入# if len(sys.argv) > 1:#   tunnel_name = sys.argv[1] # 第一个命令行参数作为隧道名称# else:#   print("请提供一个隧道名称作为参数,或者留空以自动提示输入。")#   tunnel_name = input("请输入隧道名称: ")#   if not tunnel_name:#     print("隧道名称不能为空。")#     sys.exit(1)tunnel_name = 'default'links = fetch_info_from_website(login_url, info_url, credentials, tunnel_name)if links:print(links[0])message = links[0]wx.SendMsg(message, who)pyperclip.copy(links[0])else:print(f"没有找到名为 {tunnel_name} 的隧道链接。")

运行界面:

PS:为了查看我的Spyder中程序的控制台,我加上了Ctrl+Tab和Ctrl+Shift+i,每一次按后都要按一下截屏,才会显示。

 

http://www.lryc.cn/news/571443.html

相关文章:

  • 软件体系结构-论述、设计、问答
  • C++---类和对象(中)
  • BERT介绍
  • 失业学习-前端工程化-webpack基础
  • 智慧城市-城市道路塌方检测数据集VOC+YOLO格式768张1类别
  • 微軟將開始使用 Copilot Vision 監控 Windows 10 和 11 用戶的螢幕
  • 视频点播web端AI智能大纲(自动生成视频内容大纲)的代码与演示
  • 【matlab】图片转视频
  • 【PDF提取表格】批量提取PDF里的内容保存到Excel表格,批量提取PDF文档中的信息到Excel的具体步骤和注意事项
  • FPGA基础 -- Verilog门级建模之奇偶校验电路
  • ollama部署开源大模型
  • VS和VS Code 对比和区别
  • 【图像处理入门】9. 基础项目实战:从去噪到图像加密
  • 计算机视觉课程笔记-机器学习中典型的有监督与无监督学习方法的详细分类、标签空间性质、解释说明,并以表格形式进行总结
  • 论文笔记 <交通灯> IntelliLight:一种用于智能交通灯控制的强化学习方法
  • 2025年- H82-Lc190--322.零钱兑换(动态规划)--Java版
  • 海康威视GigE工业相机的python调用demo
  • 2.8 获取IMU数据与航向锁定
  • Kafka 4.0.0集群部署
  • 二十四、【用户管理与权限 - 篇六】前端动态展现:基于权限的菜单与按钮控制
  • Leetcode-​2537. 统计好子数组的数目​
  • SALMONN-omni论文阅读
  • Datawhale YOLO Master 第1次笔记
  • 利用Enigma Virtual Box将QT生成的软件打包成一个exe可执行文件
  • 第100+42步 ChatGPT学习:R语言实现阈值调整
  • uniapp + vite + ts出现红色波浪线,各种ts报错
  • LeetCode--33.搜索旋转排序数组
  • 探秘KingbaseES在线体验平台:技术盛宴还是虚有其表?
  • List、Queue、Deque、Stack常用方法总结
  • 论文笔记:Trajectory generation: a survey on methods and techniques