PyVirtualDisplay,一个虚拟显示利器 Python 库!
PyVirtualDisplay,一个虚拟显示利器 Python 库!
在服务器跑自动化脚本时,没有显示器可真是个烦心事。PyVirtualDisplay就是专门解决这个问题的,它能在没有实际显示器的情况下创建一个虚拟显示器。这就像变魔术一样,明明没有显示器,程序照样能跑图形界面!
基础使用:创建虚拟显示器
先来看看最基本的用法,创建一个虚拟显示器:
from pyvirtualdisplay import Display
import time
display = Display(visible=0, size=(800, 600))
display.start()
# 这里放你的图形界面代码
time.sleep(5) # 假装在做些事情
display.stop()温馨提示:运行前记得先安装Xvfb:sudo apt-get install xvfb(Linux系统),Windows用户可以跳过这步。
配合Selenium:无头浏览器自动化
这玩意儿跟Selenium简直是天生一对:
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=0, size=(1920, 1080))
display.start()
driver = webdriver.Firefox()
driver.get('https://www.python.org')
print(driver.title)
driver.save_screenshot('python_org.png')
driver.quit()
display.stop()看,这下没显示器也能截图了,简直美滋滋!
处理不同分辨率:自定义显示器大小
有时候需要测试不同分辨率下的效果:
from pyvirtualdisplay import Display
from selenium import webdriver
resolutions = [(800, 600), (1024, 768), (1920, 1080)]
for width, height in resolutions:
display = Display(visible=0, size=(width, height))
display.start()
driver = webdriver.Firefox()
driver.get('https://www.python.org')
driver.save_screenshot(f'screenshot_{width}x{height}.png')
driver.quit()
display.stop()录制屏幕:捕捉操作过程
还能录制虚拟显示器上发生的一切:
from pyvirtualdisplay.display import Display
from pyvirtualdisplay.xauth import Xauth
import time
import os
display = Display(visible=0, size=(800, 600))
display.start()
# 开始录制
os.system(f'ffmpeg -f x11grab -video_size 800x600 -i :{display.display} output.mp4 &')
# 假装做些操作
time.sleep(10)
# 停止录制
os.system('pkill ffmpeg')
display.stop()温馨提示:录屏功能需要安装ffmpeg,别忘了先装上:sudo apt-get install ffmpeg。
错误处理:优雅地处理异常
写代码不能太任性,该处理的异常得处理:
from pyvirtualdisplay import Display
import sys
try:
display = Display(visible=0, size=(800, 600))
display.start()
# 你的代码
except Exception as e:
print(f"啊呀,出错了:{e}")
sys.exit(1)
finally:
if 'display' in locals():
display.stop()PyVirtualDisplay这么好用,不过也有些小坑得注意:
1、内存管理很重要:
用完记得及时关闭,不然内存哗哗往外流。
2、权限问题要注意:
Linux下可能需要sudo权限,不然会报错。
3、截图和录屏的存储:
记得检查磁盘空间,别一不小心把硬盘写满了。
在服务器上跑自动化测试、爬虫什么的,PyVirtualDisplay绝对是个好帮手。不过用之前最好先在本地测试下,确保代码没问题再丢服务器上跑。要是遇到显示相关的问题,十有八九是环境配置的锅,多看看报错信息,一般都能解决。
