Selenium单Driver会话能否使用两个不同文件模拟摄像头
在单个Selenium会话中切换模拟摄像头视频文件的方法
答案是可以实现,但直接通过启动参数--use-file-for-fake-video-capture没法中途修改——这个参数是Chrome启动时加载的,会话启动后就没法直接更改。不过可以通过以下两种方式绕开限制:
方法一:用Chrome DevTools Protocol(CDP)动态切换
这是最靠谱的方式,利用Chrome的CDP接口直接覆盖视频捕获设备的源文件,步骤如下:
- 启动Selenium Driver时,可选指定一个初始视频文件,或者不指定(默认会用Chrome自带的测试视频)
- 当需要切换到第二个视频文件时,调用CDP的
Media.setVideoCaptureDeviceOverride接口,传入新文件的绝对路径 - 如果要切回第一个文件,再次调用这个接口传入第一个文件的路径即可
举个Python代码示例:
# 切换到第二个视频文件 driver.execute_cdp_cmd("Media.setVideoCaptureDeviceOverride", { "deviceId": "", # 留空表示覆盖默认摄像头设备 "videoFile": "/绝对路径/第二个视频文件.y4m" }) # 切回第一个视频文件 driver.execute_cdp_cmd("Media.setVideoCaptureDeviceOverride", { "deviceId": "", "videoFile": "/绝对路径/第一个视频文件.y4m" }) # 清除模拟,恢复真实摄像头 driver.execute_cdp_cmd("Media.clearVideoCaptureDeviceOverride", {})
注意:Chrome只认**YUV4MPEG2格式(.y4m)**的视频文件,其他格式需要转码,用ffmpeg命令即可:
ffmpeg -i 你的原视频.mp4 -f yuv4mpeg2 转换后的视频.y4m
方法二:重启媒体服务(备用方案)
如果CDP的方式不生效,可以尝试通过CDP重启Chrome的媒体服务,再重新设置视频文件:
- 调用
Media.clearVideoCaptureDeviceOverride清除当前模拟 - 用
Browser.resetPermissions重置媒体权限 - 关闭当前所有使用摄像头的页面
- 再次调用
Media.setVideoCaptureDeviceOverride设置新的视频文件
这个方法比较繁琐,优先推荐方法一。
内容的提问来源于stack exchange,提问作者Akshay J
相关产品推荐
相关产品推荐

