PyVirtualDisplay:给无头浏览器加个“显示器”

文摘   2024-11-14 10:19   重庆  

在做自动化测试时,你肯定遇到过这个烦心事 - 服务器上跑Selenium时总是报“需要显示器”的错。这不能忍啊!要是能给服务器装个“虚拟显示器”就好了。还真有这么个东西 - PyVirtualDisplay ,它就是专门解决这类问题的救星。


说白了就是在内存里模拟一个显示器,你运行的程序都以为自己连着真显示器,其实是在跟这个虚拟的“纸片人显示器”打交道。


from pyvirtualdisplay import Display

from selenium import webdriver

display = Display(visible=0, size=(800, 600))

display.start()

driver = webdriver.Chrome()

driver.get('http://www.python.org')

print(driver.title)

driver.quit()

display.stop()

创建个虚拟显示器就跟变魔术一样简单,三板斧就搞定:


  1. 创建Display对象

  2. 启动它

  3. 用完记得关掉


温馨提示:别忘了安装Xvfb,不然PyVirtualDisplay就傻眼了:


# Ubuntu/Debian

apt-get install xvfb

# CentOS/RHEL

yum install xorg-x11-server-Xvfb

平时测试想看看浏览器到底在干啥,把visible=0改成visible=1就行。不过要记住,服务器上想看到界面还得装个X Window。


# 这回能看到浏览器窗口啦

display = Display(visible=1, size=(1024, 768))

有时候一个显示器不够用?整多个呗:


display1 = Display(visible=0, size=(800, 600))

display2 = Display(visible=0, size=(1024, 768))

display1.start()

# 干点事

display1.stop()

display2.start()

# 再干点事

display2.stop()

还能设置不同的后端,比如用Xvfb或者Xephyr:


display = Display(backend='xvfb', size=(800, 600))

# 或者

display = Display(backend='xephyr', size=(800, 600))

烦死了每次都要手动stop?用with语句啊:


with Display(visible=0, size=(800, 600)):

    driver = webdriver.Chrome()

    driver.get('http://www.python.org')

    driver.quit()

# 出了with块自动停止display

玩PyVirtualDisplay也有几个坑得提醒下:


  • 内存不会自动释放,长期运行要手动管理

  • 多进程情况下要小心,每个进程最好用自己的Display

  • 有时候会莫名其妙挂掉,做好异常处理

  • 不同系统表现可能不一样,部署前多测测


通过PyVirtualDisplay,你就能在无头环境下玩转各种需要GUI的自动化测试了。它就像给你的程序装了个隐形眼镜,明明啥都没有,却能看得一清二楚。这代码一跑,测试不再受显示器的气!


代码和环境都配好了,赶紧试试给你的自动化测试加个“显示器”吧!好玩又实用,测试环境再也不用愁了。

重庆城市TV
重庆广电城市TV旗下优质内容品牌,感谢您的关注!
 最新文章