如何用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
相关产品推荐
相关产品推荐

