Playwright 无直接清除 Session Storage 的 API,需通过 page.evaluate() 注入 JavaScript 执行 sessionStorage.clear();必须确保页面已加载目标 origin 后操作,推荐每次测试新建 BrowserContext 以避免残留。

Playwright 中没有直接清除 Session Storage 的 API
Playwright 本身不提供类似 page.clear_session_storage() 这样的方法。Session Storage 是绑定在特定 origin(协议 + 域名 + 端口)下的,且只对当前页面上下文(BrowserContext)中的页面生效。想“清除指定 origin 的 Session Storage”,本质是得在对应页面加载后、通过 JavaScript 注入执行清理逻辑。
用 page.evaluate() 手动清空指定 origin 的 Session Storage
必须先确保页面已导航到目标 origin,否则 sessionStorage 对象不可访问或为空。常见错误是:页面还没加载完就调用 evaluate,或在错误的页面实例上调用(比如新打开的空白页)。
实操建议:
- 等待页面到达目标 URL 后再操作:
await page.goto("https://example.com")→await page.wait_for_load_state("networkidle") - 用
page.evaluate(() => sessionStorage.clear())清空当前页 origin 的全部数据 - 若只想删某个 key,用
page.evaluate(key => sessionStorage.removeItem(key), "myToken") - 注意:不能跨 origin 操作 —— 在
https://a.com页面里无法读写https://b.com的sessionStorage
想复用 context 多次测试?别依赖单个 BrowserContext
Session Storage 生命周期与页面实例强绑定,但 Playwright 的 BrowserContext 会复用底层 session(尤其在 Chromium),导致看似“新开页面”却残留上一次的 sessionStorage。这不是 bug,是浏览器行为。
规避方式:
- 每次测试都新建独立 context:
context = await browser.new_context(),比反复清理更可靠 - 如果必须复用 context,务必在每个测试用例末尾显式跳转到目标页并清空:
await page.goto(target_url); await page.evaluate(() => sessionStorage.clear()) - 避免用
page.goto("about:blank")后再跳转 —— 这可能让 origin 变成about:blank,导致sessionStorage不可访问
调试时怎么确认 Session Storage 是否真被清了?
别只信代码执行成功。Session Storage 是内存级存储,刷新页面即丢失,所以验证必须在同一页内做。
推荐做法:
- 清空前查数量:
await page.evaluate(() => sessionStorage.length) - 清空后立刻再查:
await page.evaluate(() => sessionStorage.length === 0) - 或者导出全部 key:
await page.evaluate(() => Object.keys(sessionStorage)),看是否为空数组 - 注意控制台里手动执行
sessionStorage.clear()有效,不代表脚本里一定生效 —— 检查上下文和时机
最常被忽略的是页面 origin 不匹配和执行时机过早。只要确保 page 已正确加载目标地址,并在该页面实例上调用 evaluate,就能稳定清除。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











