本文将展示如何在有另一个Python进程运行时,使用Python自动录制屏幕生成视频,并用以检查其执行情况。

大多数时候,当需要对非常老旧的系统进行自动化时,将不得不通过GUI来完成,因为它们没有API,GUI自动化可能非常棘手并且会出现意外行为。

解决这个问题的最好方法是尝试处理代码中的每一个可能的异常,但也可能会发生意外错误。所以当发生异常时,最好保存一个异常情况的视频来以便于分析,并调试代码。

使用Python的多进程库,在与运行自动化的线程不同的线程中,运行屏幕录制脚本。已经用三个不同的库测试了这个脚本的屏幕录制:MssPillow,和Pyautogui。在这些库中,Mss是表现最好的一个。

以下是固定时间录制的代码片段:

from time import sleep
from mss.windows import MSS as mss
import multiprocessing
import pyautogui
import cv2
import numpy as np
from os import removeclass FixedTimeCapture:def __init__(self, capture_time:int, video_path:str='C:/test') -> None:self.fps = 15self.capture_time = capture_timeself.video_path = video_path.replace('\\','/') + '.avi'self.process = multiprocessing.Process(target=self.capture_screen,args=(),name='Screen Capture')  def capture_screen(self):SCREEN_SIZE = tuple(pyautogui.size())fourcc = cv2.VideoWriter_fourcc(*'XVID')out = cv2.VideoWriter(self.video_path, fourcc, self.fps, (SCREEN_SIZE))print(f'Screen capture started')w, h = pyautogui.size() monitor = {'top':0, 'left':0, 'width':w, 'height':h}  with mss() as sct:for i in range(int(self.capture_time * self.fps)):try:img = sct.grab(monitor=monitor) frame = np.array(img)frame = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR)out.write(frame)except IOError:                    pass   cv2.destroyAllWindows()out.release()sleep(3)print('Screen capture finished')def start_capture(self):self.process.start()def abort_capture(self):if not self.process.is_alive():print('The process is not executing')else:print('Aborting screen capture')self.process.kill()sleep(3)try:remove(self.video_path)except:print('Couldnt delete the file')if __name__ == '__main__':ct = FixedTimeCapture(capture_time=10, video_path=r'C:\test')ct.start_capture()# 如果想中止录制并在其完成之前删除文件# ct = FixedTimeCapture(capture_time=10, video_path=r'C:\test2')# ct.start_capture()# sleep(5)# ct.abort_capture()

请注意,其中包含了一个选项来中止进程并在必要时删除文件。使用的是AVI视频编解码器,录制速度为15帧/秒,但可以自行更改这些设置。

不知道录制的过程要花多长时间的情况下,可以创建一个函数来开始录制,另一个函数来结束录制。

from time import sleep
from mss.windows import MSS as mss
import multiprocessing
import pyautogui
import cv2
import numpy as np
from os import removeclass CaptureScreen:def __init__(self, video_path:str) -> None:self.fps = 15self.video_path = video_path.replace('\\','/') + '.avi'self.process = multiprocessing.Process(target=self.capture_screen,args=(),name='Screen Capture')  def capture_screen(self):SCREEN_SIZE = tuple(pyautogui.size())fourcc = cv2.VideoWriter_fourcc(*'XVID')out = cv2.VideoWriter(self.video_path, fourcc, self.fps, (SCREEN_SIZE))img = Noneprint(f'Screen capture started')# MSSw, h = pyautogui.size() monitor = {'top':0, 'left':0, 'width':w, 'height':h}      with mss() as sct:        while True:      try:                try:               img = sct.grab(monitor=monitor)         frame = np.array(img)               frame = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR)                 out.write(frame)                                 except IOError:                    pass            except KeyboardInterrupt:                breakcv2.destroyAllWindows()out.release()# # PILLOW # from PIL import ImageGrab# w, h = pyautogui.size()           # while True:        #     try:   #         try:      #             img = ImageGrab.grab(bbox =(0, 0, w, h))         #             frame = np.array(img)                  #             frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)                 #             out.write(frame)   #         except IOError:                    #             pass                                               #     except KeyboardInterrupt:                #         break# cv2.destroyAllWindows()# out.release()# # PYAUTOGUI# while True:#     try:#         try:   #             img = pyautogui.screenshot()#             frame = np.array(img)#             frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)#             out.write(frame)#         except IOError:                    #             pass  #     except KeyboardInterrupt:#         break# cv2.destroyAllWindows()# out.release()def start_capture(self):self.process.start()def finish_capture(self):if not self.process.is_alive():print('The process is not executing')else:self.process.terminate()sleep(3)print('Screen capture finished')if __name__ == '__main__':c = CaptureScreen(video_path=r'C:\test')c.start_capture()sleep(15)c.finish_capture()

在这个例子中,还包含了PillowPyautogui的实现,如果想进行一下测试,需要调整帧率以获得100%完美的视频再现速度。

使用Python进行自动化录屏相关推荐

  1. Android、iOS如何实现自动化录屏,超实用!

    阅读本文大约需要1分钟. 背景 在做移动端自动化测试的过程中,有很多场景需要录制设备的屏幕视频,比如Crash现场记录,启动/页面加载耗时类的评测等,那么如何实现Android和iOS设备的屏幕录制呢 ...

  2. android 录屏自动运行,自动化录屏方案简介 for Android

    原标题:自动化录屏方案简介 for Android 前言 针对移动端项目的评测,为了记录并评估产品表现,时常需要对设备进行录屏以作后续分析. 那么,应该如何在Python脚本中可靠.可控地实现安卓设备 ...

  3. Python自动覆盖录屏软件——NIRE工作室开源软件(参数自动校正)(欢迎白嫖)

    复调录屏软件 版本号:0.1.1 Alpha 发行时间:2021年02月11日 发布方:NIRE工作室 开发者:Nire_Yeyu 一.软件描述 目标群体:软件开发工程师.测试工程师.工程实施人员.软 ...

  4. 如何用python把Mac录屏转换成GIF

    先import要用的package import moviepy.editor as mpy 读取录屏 clip = mpy.VideoFileClip('your_path.mov')##我用mac ...

  5. 【python做个录屏软件】2.用PyQt5做个漂亮的GUI

    本篇内容包含: 1.PyQt5-手动书写GUI 2.无边框无标题栏界面 3.鼠标拖动 4.界面隐藏到桌面右边,靠近弹出. 1. GUI的模板 import sys from PyQt5 import ...

  6. 一个基于python实现的录屏软件

    使用背景:需要对一款线上课程进行自动化实时录制,而现有的Python开源代码会出现如 视频声音不同步.动画快放等各种各样的问题 设计目标:利用Python中的opencv和pyaudio库,实现屏幕的 ...

  7. python tkinter 实现录屏软件

    详情看博客我的博客, 效果绝对好 截图:

  8. python屏幕录制录屏保存

    from PIL import ImageGrab import numpy as np import cv2image = ImageGrab.grab()#获得当前屏幕 width = image ...

  9. python录屏工具下载_Python移动端录屏库

    Python移动端录屏库 背景 日常移动端专项测试和自动化测试通常有一些场景如:Ui自动化的操作捕获.App启动耗时.视频启播耗时等,通常都有需要边操作边录屏,而对于启动耗时测试通常还需要质量较高且帧 ...

最新文章

  1. Code爱好者必去的20个网站(开源项目托管网站)
  2. 类的加载顺序和静态代码块和匿名代码块的区别
  3. python k线顶分型_【缠论】分型、笔的定义及其程序化
  4. android启动页面显示空白,android – 启动时的空白页面
  5. oracle em界面监控出来的奇怪图像_海康poe主机断电重启后不出图像,显示用户被锁定...
  6. NSDictionary / NSMutableDictionary 及 NSArray / NSmutableArray (实例)
  7. 潮流仿真分析matlab,基于MATLAB的电力系统潮流仿真与研究
  8. 基础总结篇之六:ContentProvider之读写联系人
  9. unix系统简明教程 命令
  10. ios vue 添加本地音乐_vue怎么添加自己的音乐
  11. java工程师简历项目经验
  12. 使用共享文件夹实现上位机和下位机的信息传输
  13. c语言教材1-8章参考答案,C语言课后习题参考答案(第1-8章)
  14. PS2022神经滤镜Neural Filters离线安装包(PS2022/PS2021)
  15. 数学与计算机学院女生节标语,北师最新最全女生节标语
  16. VS2019项目自动包含bin或obj文件夹的问题
  17. php正则匹配汉字!
  18. 利用词向量计算上下位关系
  19. 关于城市旅游的HTML网页设计——(旅游风景云南 5页)HTML+CSS+JavaScript
  20. 字符编码的故事(ASCII ISO GBK GB2312 UTF-8)

热门文章

  1. 2018: 穿山甲到底说了什么? | 掘金年度征文
  2. 【大咖说Ⅲ】谢娟英教授:基于深度学习的野外环境下蝴蝶物种自动识别
  3. js 伪造referer_javascript操作referer方法探讨
  4. 无菌医疗产品国内注册-YY/T 0681.15-2019
  5. 编译原理语法分析器实验报告
  6. edas info_阿里云的edas
  7. Cesium 地球自转 场景不转动球体转动
  8. Android Studio实现推箱子小游戏
  9. 山东大学软件学院数据库系统实验八、九
  10. 计算机专业法语词汇,法语网络计算机相关词汇