我有一个在 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
,我想录制视频以便看看发生了什么。关于如何实现这一目标有什么想法吗?
创建一个新的显示(您已经这样做了)
开始视频录制。
通过 webdriver 启动浏览器。
等待浏览器完成您的场景。
停止录像。
摧毁显示器。
添加 mentallurg 的答案:
注意:如果您想观看视频,请禁用无头模式。在您的情况下,请勿添加无头的 chrome 选项
您需要使用 extra_args 参数在 pyvirtualdisplay 中设置显示数量。如果你在 ubuntu 上,首先像这样设置显示变量:
export DISPLAY=:99
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()