如何在Selenium WebDriver Chrome中修改虚拟视频设备名称
解决Chrome虚拟视频设备名称显示为文件名的问题
我之前在做自动化测试时也碰到过一模一样的问题——用--use-file-for-fake-video-capture指定虚拟视频源后,设备名称直接显示成了文件名,完全不符合需求。研究了Chrome的命令行参数和相关生态后,给你整理几个可行的方案:
1. 改用第三方虚拟摄像头工具(最推荐)
Chrome自带的fake视频流功能确实没有提供修改设备名称的参数,所以最靠谱的方式是绕过这个原生功能,用第三方虚拟摄像头工具来实现:
- 比如OBS Virtual Camera、ManyCam或者DroidCam这类工具,都支持自定义虚拟摄像头的名称;
- 安装工具后,在设置里把设备名称改成你想要的内容(比如“我的虚拟摄像头”);
- 然后在Chrome里直接选择这个第三方虚拟设备,不需要再用
--use-fake-device-for-media-stream和--use-file-for-fake-video-capture这两个参数; - 这种方式不仅能自定义名称,还支持更多视频格式和特效,兼容性也更好。
2. 通过Chrome扩展拦截媒体设备API(网页级修改)
如果你只需要在特定网页里修改设备显示名称,可以写一个简单的Chrome扩展,注入脚本重写媒体设备的返回结果:
- 创建一个扩展,在
manifest.json里添加activeTab和scripting权限; - 注入的脚本里重写
navigator.mediaDevices.enumerateDevices()方法,拦截返回的设备列表,把对应虚拟设备的label字段改成你想要的名称; - 示例代码片段:
const originalEnumerateDevices = navigator.mediaDevices.enumerateDevices; navigator.mediaDevices.enumerateDevices = async function() { const devices = await originalEnumerateDevices.call(this); return devices.map(device => { if (device.label.includes('video_camera.y4m')) { return {...device, label: '自定义虚拟摄像头'}; } return device; }); }; - 这个方案只对安装了扩展的网页生效,属于前端层面的修改,不是全局设备名称变更。
3. 利用Chrome DevTools协议(自动化场景)
如果是用Selenium、Puppeteer这类自动化工具,可以尝试通过Chrome DevTools协议来修改设备信息:
- 部分版本的Chrome支持
Media.setDeviceOverride命令,你可以通过这个接口指定自定义的设备名称; - 以Puppeteer为例,大概的代码逻辑是:
await page.target().createCDPSession().then(async session => { await session.send('Media.setDeviceOverride', { videoDeviceId: 'your-device-id', videoDeviceLabel: '自定义虚拟摄像头' }); }); - 注意:这个方法依赖Chrome的版本,部分旧版本可能不支持,而且需要提前获取到目标设备的ID,适配性不如第三方工具。
补充说明
Chrome官方的文档里确实明确了--use-file-for-fake-video-capture只支持无扩展名的mjpeg/y4m文件,且没有提供修改设备名称的配套参数,所以原生功能里暂时没办法直接修改名称。上面的几个方案里,第三方虚拟摄像头是最稳定、通用的选择。
内容的提问来源于stack exchange,提问作者Anton Budarov
相关产品推荐
相关产品推荐

