+
17
-

回答

headless=true的模式下是无法播放声音的,只有设置false才能实现

两种方式

1、可以通过修改浏览器启动参数来允许自动播放声音:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 配置浏览器参数以允许自动播放
    browser = p.chromium.launch(
        args=[
            '--autoplay-policy=no-user-gesture-required',  # 允许自动播放
            '--disable-features=PreloadMediaEngagementData,AutoplayIgnoreWebAudio'  # 禁用相关限制
        ],
        headless=False  # 非无头模式,便于测试
    )
    
    page = browser.new_page()
    page.goto('https://example.com')  # 替换为你要测试的网站
    
    # 等待音频元素加载完成
    page.wait_for_selector('audio')
    
    # 点击页面以触发用户交互(有些网站可能仍然需要)
    page.click('body')
    
    # 等待一段时间以观察效果
    page.wait_for_timeout(10000)
    
    browser.close()

2、使用 JavaScript 执行播放

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto('https://example.com')  # 替换为包含音频的网站
    
    # 等待音频元素加载
    audio_selector = 'audio'
    page.wait_for_selector(audio_selector)
    
    # 执行JavaScript播放音频
    page.evaluate('''() => {
        const audioElements = document.querySelectorAll('audio');
        audioElements.forEach(audio => {
            audio.play().catch(e => console.log('播放失败:', e));
        });
    }''')
    
    # 等待一段时间以观察效果
    page.wait_for_timeout(10000)
    
    browser.close()

网友回复

我知道答案,我要回答