You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Chrome Selenium音频输出故障:配置虚拟音频捕获参数后仍无法发送音频

解决Chrome Selenium虚拟音频无法正常发送的问题

我之前在调试Chrome Selenium的虚拟音频设备时也碰到过几乎一模一样的问题,结合你给出的参数配置,这里有几个关键的排查和修复方向,按优先级来:

1. 立刻移除--mute-audio参数(最可能的元凶)

你当前的配置里加了--mute-audio,这个参数会全局静音Chrome的所有音频输出——包括虚拟麦克风的音频流。这直接导致了测试站点无法接收到音频信号,哪怕虚拟设备已经加载成功。

2. 校验音频文件的路径与格式

--use-file-for-fake-audio-capture=1.wav的路径问题很容易被忽略:

  • 务必使用绝对路径,相对路径在Selenium的Chrome进程中可能无法正确解析,比如写成--use-file-for-fake-audio-capture=/home/user/1.wav(Windows下是C:\\audio\\1.wav
  • 确保WAV文件是Chrome支持的无压缩格式:PCM 16位、采样率44.1kHz/48kHz、单声道或双声道。如果你的文件不符合,可以用ffmpeg转码:
    ffmpeg -i your-audio.wav -acodec pcm_s16le -ar 44100 -ac 2 fixed-audio.wav
    

3. 补充媒体流权限与兼容性参数

现有参数的基础上,添加以下参数来解决权限限制和版本兼容性问题:

  • --disable-media-stream-restrictions:解除媒体流的部分权限限制,让虚拟设备的音频能正常传输
  • --disable-features=AudioServiceOutOfProcess:禁用Chrome的音频服务进程分离,避免虚拟设备和主进程的通信问题
  • --disable-dev-shm-usage:如果是在Docker或低内存环境下运行,这个参数可以替代--no-sandbox的部分功能,同时减少媒体设备的权限冲突

调整后的参数列表示例:

options.add_argument('--no-sandbox')
options.add_argument('--allow-file-access-from-files')
options.add_argument('--disable-translate')
# 移除--mute-audio
options.add_argument("--use-fake-ui-for-media-stream")
options.add_argument("--use-fake-device-for-media-stream")
options.add_argument("--use-file-for-fake-audio-capture=/absolute/path/to/fixed-audio.wav")
# 新增参数
options.add_argument('--disable-media-stream-restrictions')
options.add_argument('--disable-features=AudioServiceOutOfProcess')
options.add_argument('--disable-dev-shm-usage')

4. 验证站点权限与媒体流加载

启动Chrome后,手动确认测试站点的麦克风权限:

  1. 访问测试页面后,在地址栏输入chrome://settings/content/siteDetails?site=https://driversol.com/ru/tests/webcamtest/
  2. 检查「麦克风」权限是否设置为「允许」,且默认设备显示为虚拟设备

另外,在开发者工具的Console里执行以下代码,确认音频轨道是否正常加载:

navigator.mediaDevices.getUserMedia({audio: true})
  .then(stream => console.log("音频轨道信息:", stream.getAudioTracks()))
  .catch(err => console.error("获取音频流失败:", err))

如果返回的轨道列表为空或报错,说明参数未生效,需要检查Chrome和chromedriver的版本是否完全匹配(必须主版本号一致)。

5. 配置站点权限的预设置

如果每次访问测试站点都需要手动授权,可以通过Chrome的实验性偏好设置提前配置:

options.add_experimental_option('prefs', {
    'profile.default_content_setting_values.media_stream_mic': 1,
    'profile.content_settings.exceptions.media_stream_mic.*.setting': 1
})

按以上步骤排查后,虚拟音频应该能正常发送到测试站点了。

内容的提问来源于stack exchange,提问作者Anton Budarov

火山引擎 最新活动