Playwright Python:新标签页视频录制失效问题求助
解决Playwright Python中同窗口新标签页无法录制视频的问题
问题根源
你的示例代码存在逻辑错误:创建new_page后重新初始化了context和page,导致原new_page所属的旧上下文被覆盖且未正确处理;同时你误解了Playwright的视频录制规则——视频录制是绑定在浏览器上下文(context)上的,同一个上下文内的所有页面(标签页)都会自动被录制,无需单独配置。
修正方案
1. 主动创建新标签页的场景
只需保证所有标签页都在同一个开启了视频录制的上下文内创建,即可自动录制所有页面操作:
def test_perform_actions_and_record(): with sync_playwright() as playwright: browser = playwright.chromium.launch(headless=False) # 仅创建一个带视频录制配置的上下文 context = browser.new_context(record_video_dir="videos/") # 第一个标签页 page = context.new_page() page.goto("https://example.com") # 同一上下文内创建新标签页,自动继承录制配置 new_page = context.new_page() new_page.goto("https://example2.com") # 新标签页操作会被正常录制 new_page.fill("#username", "example_user") new_page.fill("#password", "example_password") new_page.click("#login_button") # 按顺序关闭资源 page.close() new_page.close() context.close() browser.close()
2. 点击链接触发新标签页的实际场景
通过监听上下文的page事件捕获自动打开的新标签页,基于同一上下文实现录制:
def test_record_new_tab_from_click(): with sync_playwright() as playwright: browser = playwright.chromium.launch(headless=False) context = browser.new_context(record_video_dir="videos/") page = context.new_page() page.goto("https://example.com") # 监听上下文的page事件,等待新标签页打开 new_page_promise = context.wait_for_event("page") # 模拟点击打开新标签页的链接(替换为你实际的选择器) page.click("a[target='_blank']") new_page = new_page_promise.result() # 等待新标签页加载完成 new_page.wait_for_load_state() # 新标签页的操作会被录制 new_page.fill("#username", "example_user") new_page.fill("#password", "example_password") new_page.click("#login_button") # 清理资源 page.close() new_page.close() context.close() browser.close()
注意事项
- 每个页面的视频文件会以页面唯一ID命名,保存在
record_video_dir指定目录下 - 必须调用
context.close()才能确保视频文件完整保存,直接关闭浏览器可能导致视频损坏 - 若需自定义视频文件名,可在页面关闭后通过
page.video.path()获取路径,自行重命名
内容的提问来源于stack exchange,提问作者Subasri sridhar
相关产品推荐
相关产品推荐

