You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Selenium录制Chrome标签页?现有方案报错求助

多Chrome标签页录屏解决方案及报错修复

报错原因及修复

你遇到的Unresolved attribute reference 'create_cdp_session' for class 'Browser'错误,是因为pyppeteer的Browser类并没有create_cdp_session方法——该方法属于Page对象的target属性。同时你混用selenium和pyppeteer会增加不必要的复杂度,建议单独使用其中一种工具实现。

可行方案一:用Pyppeteer实现异步多标签页录屏

Pyppeteer的异步特性适合并行录制多个标签页,效率更高。

步骤1:安装依赖

pip install pyppeteer

完整代码

import asyncio
import pyppeteer

async def record_tab(url: str, save_path: str):
    # 启动浏览器,headless=False可查看录制过程,按需改为True
    browser = await pyppeteer.launch(headless=False)
    page = await browser.newPage()
    await page.goto(url, waitUntil='networkidle2')  # 等待页面加载完成
    
    # 创建CDP会话(正确方式)
    cdp_session = await page.target.createCDPSession()
    
    video_chunks = []
    
    # 监听录屏帧事件,收集视频数据
    async def handle_frame(event):
        video_chunks.append(event['data'])
        # 必须发送确认,才能继续接收下一帧
        await cdp_session.send('Page.screencastFrameAck', {'sessionId': event['sessionId']})
    
    cdp_session.on('Page.screencastFrame', handle_frame)
    
    # 启动录屏
    await cdp_session.send('Page.startScreencast', {
        'format': 'webm',
        'quality': 80,
        'everyNthFrame': 1
    })
    
    # 设置录制时长,可根据需求调整或改为事件触发停止
    await asyncio.sleep(10)
    
    # 停止录屏
    await cdp_session.send('Page.stopScreencast')
    
    # 将收集的视频帧写入本地文件
    with open(save_path, 'wb') as f:
        for chunk in video_chunks:
            f.write(chunk)
    
    await page.close()
    await browser.close()

async def main():
    # 定义需要录制的标签页URL和保存路径
    tasks = [
        record_tab('https://www.example.com', 'example.webm'),
        record_tab('https://www.google.com', 'google.webm')
    ]
    # 并行执行多个录制任务
    await asyncio.gather(*tasks)

if __name__ == '__main__':
    asyncio.run(main())

可行方案二:用Selenium实现多标签页录屏

如果你更熟悉Selenium,也可以用它的CDP接口实现:

完整代码

from selenium import webdriver
import time

def record_tab(url: str, save_path: str):
    chrome_options = webdriver.ChromeOptions()
    # 可选开启无头模式
    # chrome_options.add_argument('--headless=new')
    # chrome_options.add_argument('--disable-gpu')
    
    driver = webdriver.Chrome(options=chrome_options)
    driver.get(url)
    time.sleep(2)  # 等待页面加载
    
    # 创建CDP会话
    cdp = driver.create_cdp_session()
    
    video_chunks = []
    
    # 监听录屏帧事件
    def handle_frame(event):
        video_chunks.append(event['data'])
        cdp.send('Page.screencastFrameAck', {'sessionId': event['sessionId']})
    
    driver.add_cdp_listener('Page.screencastFrame', handle_frame)
    
    # 启动录屏
    cdp.send('Page.startScreencast', {
        'format': 'webm',
        'quality': 80,
        'everyNthFrame': 1
    })
    
    # 录制时长
    time.sleep(10)
    
    # 停止录屏
    cdp.send('Page.stopScreencast')
    
    # 写入文件
    with open(save_path, 'wb') as f:
        for chunk in video_chunks:
            f.write(chunk)
    
    driver.quit()

# 执行录制任务
record_tab('https://www.example.com', 'example_selenium.webm')
record_tab('https://www.google.com', 'google_selenium.webm')

注意事项

  • 确保Chrome浏览器版本与chromedriver版本匹配,避免兼容性问题
  • 录制时长可按需调整,也可改为监听页面特定操作事件来停止录制
  • 生成的webm格式可通过ffmpeg等工具转码为MP4等其他格式

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 21:44:49