Python实现局域网远程屏幕监控与截图识别工具

Noah
Noah
发布时间:2026-10-14 | 3人浏览过
原创

本文介绍使用Python编写的两个实用脚本:一是基于pyautogui和HTTPServer的局域网远程屏幕监控工具,可将学生机屏幕实时推送到家长端浏览器;二是结合PIL、keyboard及百度OCR API的截图识字工具,通过监听快捷键自动截取屏幕内容并转换为文本。文章提供了完整的代码实现、环境配置及运行方法,适用于家庭监控或办公场景。

局域网远程屏幕监控方案

近期,各地中小学普遍开展线上教学活动。部分学生在使用电脑进行在线学习时,可能会在家长不在场的情况下,利用电脑偷偷玩游戏或浏览漫画内容。

为此,本程序screenshot.py旨在作为一个监控学生机(Windows系统)屏幕活动的辅助脚本。

首先,需要在学生机上安装Python 3运行环境。此外,还需安装pyautogui库:


pip install pyautogui

在学生机上启动后台进程的方法如下:创建一个批处理文件,使用无窗口模式的Python运行命令。请根据实际的Python安装路径和脚本所在文件夹调整以下命令。

c:\python37\pythonw.exe d:\py\screenshot.py 1>1.txt 2>2.txt

监控脚本核心代码


from http.server import BaseHTTPRequestHandler, HTTPServer
import pyautogui, socket
# for windows, screenshot.py
# 家长监控地址: http://192.168.1.3:8009/
PORT = 8008
# 获取学生机局域网地址
IP = socket.gethostbyname(socket.gethostname())
#windows
class myHandler(BaseHTTPRequestHandler):
 def do_GET(self):
 img = pyautogui.screenshot() #屏幕截图
 if img:
  self.send_response(200) #HTTP 状态码
  self.send_header('Content-Type', 'image/png')
  self.end_headers()
  img.save(self.wfile, 'PNG') # 写入HTTP 响应流文件
def main():
 try:
 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 #判断当前端口是否已经打开
 result = sock.connect_ex((IP, PORT))
 portopen = result == 0
 sock.close()
 if not portopen:
  #启动web服务器,用自定义的响应处理类
  server = HTTPServer((IP, PORT), myHandler)
  server.serve_forever() # 服务器持续监听
 except:
 pass
if __name__ == '__main__':
 main()

在WIFI网络环境下,家长可在自己的电脑或手机浏览器中输入以下网址(假设学生机的IP地址为192.168.1.3):

http://192.168.1.3:8008/

访问该地址即可看到学生当前的屏幕活动画面,支持手动刷新页面以获取最新截图。

截图文字识别工具实现

补充说明:Python代码实现截图文字识别功能

此前在网上下载了一款截图识字软件,发现其免费额度有限(每天仅10次),超出后需付费解锁,对此感到不满。作为一个编程爱好者,希望开发一个免费的替代方案。

因此,使用Python编写了一个简单的工具,现分享如下。

具体代码如下:首先需要安装相关依赖库。

OCR识别与键盘监控代码


from PIL import ImageGrab,Image
import keyboard #监控键盘
from time import sleep
import sys
from aip import AipOcr

class API():
  def picture2Text(filePath):


    API_ID = '######'
    API_KEY = '#######'
    SECRET_KEY = '######'

    aipocr = AipOcr(API_ID, API_KEY, SECRET_KEY)

    image = API.getFileContent(filePath)
    texts = aipocr.basicGeneral(image)
    allTexts = ''
    for words in texts['words_result']:
      allTexts = allTexts + ''.join(words.get('words',''))
    return allTexts
   #  print(texts)


  def getFileContent(a):
    with open(a,'rb') as fp:
      return fp.read()

def seceenShot():
  '''用于获取剪切板图片信息并保存到本地'''
#ctrl+alt+a 这个看你用什么截图,qq是个
  if keyboard.wait(hotkey='ctrl+alt+a') == None:
    if keyboard.wait(hotkey='enter') == None:
      sleep(0.01)
      im_gray = ImageGrab.grabclipboard()
#      print(im_gray)
      if isinstance(im_gray,Image.Image):
        im_gray.save("250.jpg")
      else:
        print('请重新截图')
  else:
    print('请使用qq截图,小逗比(记得截图后按enter)')
if __name__ == '__main__':
  for _ in range(sys.maxsize):
    seceenShot()
    test = API.picture2Text(r'250.jpg')
    print(test)

上述代码中的第11、12、13行分别对应百度云的API账号ID、密钥和Secret Key,具体获取方式可参考下图,用户可自行注册免费账号。

代码第33行和第34行用于监控键盘操作。

第33行触发截图动作:按下Ctrl+Alt+A(具体快捷键需根据用户使用的截图工具进行调整)。

第34行确认结束:按下Enter键(必须按Enter键以完成截图保存)。

以上为个人经验分享,希望能为大家提供参考。欢迎对文中错误或未考虑周全之处提出宝贵意见。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表