使用Python进行自动化录屏
本文将展示如何在有另一个Python进程运行时,使用Python自动录制屏幕生成视频,并用以检查其执行情况。
大多数时候,当需要对非常老旧的系统进行自动化时,将不得不通过GUI来完成,因为它们没有API,GUI自动化可能非常棘手并且会出现意外行为。
解决这个问题的最好方法是尝试处理代码中的每一个可能的异常,但也可能会发生意外错误。所以当发生异常时,最好保存一个异常情况的视频来以便于分析,并调试代码。
使用Python的多进程库,在与运行自动化的线程不同的线程中,运行屏幕录制脚本。已经用三个不同的库测试了这个脚本的屏幕录制:Mss
,Pillow
,和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()
在这个例子中,还包含了Pillow
和Pyautogui
的实现,如果想进行一下测试,需要调整帧率以获得100%完美的视频再现速度。
使用Python进行自动化录屏相关推荐
- Android、iOS如何实现自动化录屏,超实用!
阅读本文大约需要1分钟. 背景 在做移动端自动化测试的过程中,有很多场景需要录制设备的屏幕视频,比如Crash现场记录,启动/页面加载耗时类的评测等,那么如何实现Android和iOS设备的屏幕录制呢 ...
- android 录屏自动运行,自动化录屏方案简介 for Android
原标题:自动化录屏方案简介 for Android 前言 针对移动端项目的评测,为了记录并评估产品表现,时常需要对设备进行录屏以作后续分析. 那么,应该如何在Python脚本中可靠.可控地实现安卓设备 ...
- Python自动覆盖录屏软件——NIRE工作室开源软件(参数自动校正)(欢迎白嫖)
复调录屏软件 版本号:0.1.1 Alpha 发行时间:2021年02月11日 发布方:NIRE工作室 开发者:Nire_Yeyu 一.软件描述 目标群体:软件开发工程师.测试工程师.工程实施人员.软 ...
- 如何用python把Mac录屏转换成GIF
先import要用的package import moviepy.editor as mpy 读取录屏 clip = mpy.VideoFileClip('your_path.mov')##我用mac ...
- 【python做个录屏软件】2.用PyQt5做个漂亮的GUI
本篇内容包含: 1.PyQt5-手动书写GUI 2.无边框无标题栏界面 3.鼠标拖动 4.界面隐藏到桌面右边,靠近弹出. 1. GUI的模板 import sys from PyQt5 import ...
- 一个基于python实现的录屏软件
使用背景:需要对一款线上课程进行自动化实时录制,而现有的Python开源代码会出现如 视频声音不同步.动画快放等各种各样的问题 设计目标:利用Python中的opencv和pyaudio库,实现屏幕的 ...
- python tkinter 实现录屏软件
详情看博客我的博客, 效果绝对好 截图:
- python屏幕录制录屏保存
from PIL import ImageGrab import numpy as np import cv2image = ImageGrab.grab()#获得当前屏幕 width = image ...
- python录屏工具下载_Python移动端录屏库
Python移动端录屏库 背景 日常移动端专项测试和自动化测试通常有一些场景如:Ui自动化的操作捕获.App启动耗时.视频启播耗时等,通常都有需要边操作边录屏,而对于启动耗时测试通常还需要质量较高且帧 ...
最新文章
- Code爱好者必去的20个网站(开源项目托管网站)
- 类的加载顺序和静态代码块和匿名代码块的区别
- python k线顶分型_【缠论】分型、笔的定义及其程序化
- android启动页面显示空白,android – 启动时的空白页面
- oracle em界面监控出来的奇怪图像_海康poe主机断电重启后不出图像,显示用户被锁定...
- NSDictionary / NSMutableDictionary 及 NSArray / NSmutableArray (实例)
- 潮流仿真分析matlab,基于MATLAB的电力系统潮流仿真与研究
- 基础总结篇之六:ContentProvider之读写联系人
- unix系统简明教程 命令
- ios vue 添加本地音乐_vue怎么添加自己的音乐
- java工程师简历项目经验
- 使用共享文件夹实现上位机和下位机的信息传输
- c语言教材1-8章参考答案,C语言课后习题参考答案(第1-8章)
- PS2022神经滤镜Neural Filters离线安装包(PS2022/PS2021)
- 数学与计算机学院女生节标语,北师最新最全女生节标语
- VS2019项目自动包含bin或obj文件夹的问题
- php正则匹配汉字!
- 利用词向量计算上下位关系
- 关于城市旅游的HTML网页设计——(旅游风景云南 5页)HTML+CSS+JavaScript
- 字符编码的故事(ASCII ISO GBK GB2312 UTF-8)