如何记录pyvirtualdisplay会话

问题描述 投票:0回答:2

我有一个在 Python 3 中使用 Selenium 的网络抓取工具,我需要录制会话视频以便进行一些调试。我首先创建Xvfb虚拟显示器:

from pyvirtualdisplay import Display
display = Display(visible=0, size=(1000, 1000))  
display.start()

然后我创建 chromium 会话:

options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome(chrome_options=options)
driver.get("myURL.com")
#
#some web scraping happening here....
#
driver.quit()
display.sendstop()
import sys
sys.exit()  

我的问题是,它有时不会停止

driver
display
,我想录制视频以便看看发生了什么。关于如何实现这一目标有什么想法吗?

python selenium xvfb
2个回答
0
投票
  1. 创建一个新的显示(您已经这样做了)

  2. 开始视频录制。

  3. 通过 webdriver 启动浏览器。

  4. 等待浏览器完成您的场景。

  5. 停止录像。

  6. 摧毁显示器。


0
投票

添加 mentallurg 的答案:
注意:如果您想观看视频,请禁用无头模式。在您的情况下,请勿添加无头的 chrome 选项
您需要使用 extra_args 参数在 pyvirtualdisplay 中设置显示数量。如果你在 ubuntu 上,首先像这样设置显示变量:

export DISPLAY=:99


安装 ffmpeg 工具,因为这将用于录制视频
sudo apt install -y ffmpeg

您的代码应该如下所示来记录测试用例:

from pyvirtualdisplay import Display
from subprocess import Popen
import shlex

display = Display(visible=False, size=(800, 600),  bgcolor="white", extra_args=[":99"])
display.start()
ffmpeg_process = Popen(shlex.split("ffmpeg -video_size 800x600 -framerate 30 -f x11grab -i :99.0+0,0 output.mp4"))
driver = webdriver.Chrome()
driver.get("www.google.com")
driver.maximize_window()

#Run your tests here

driver.quit()
display.stop()
ffmpeg_process.terminate()

© www.soinside.com 2019 - 2024. All rights reserved.