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

Playwright中storageState未正确设置,保存内容为空求助

解决Playwright storageState为空的问题

可能原因及对应方案

1. 登录状态依赖localStorage/sessionStorage而非Cookie

你当前用的requestContext仅能捕获HTTP响应中的Cookie,无法获取前端页面设置的localStorage或sessionStorage。如果目标网站用这类存储维护登录态,storageState.json自然会是空的。

解决办法:改用浏览器上下文完成登录
用Playwright浏览器实例模拟真实用户登录流程,能完整捕获所有登录相关的存储(Cookie、localStorage等)。修改global-setup.ts如下:

import { chromium } from '@playwright/test';

async function globalSetup() {
    const browser = await chromium.launch();
    const context = await browser.newContext();
    const page = await context.newPage();

    // 打开登录页
    await page.goto('https://some/page/signin');
    // 填写登录表单
    await page.fill('input[name="username"]', 'xxx');
    await page.fill('input[name="password"]', 'yyy');
    await page.check('input[name="remember"]');
    // 提交登录
    await page.click('button[type="submit"]');
    // 等待登录完成(替换为实际的登录后跳转URL)
    await page.waitForURL('https://some/page/home');

    // 保存登录状态
    await context.storageState({ path: 'storageState.json' });

    await browser.close();
}

export default globalSetup;

2. 登录请求未返回Set-Cookie响应头

尽管登录请求返回200,但服务器可能没在响应头里设置Cookie。可以在原代码中添加日志验证:

// 在post请求后添加
console.log(foo.headers());

如果输出里没有Set-Cookie字段,说明登录态不是通过Cookie维护的,必须使用上面的浏览器上下文方案。

3. requestContext存在域名/跨域匹配问题

如果登录接口的域名和Cookie生效域名不一致,requestContext可能无法正确捕获Cookie。可以给requestContext设置baseURL后重试:

const requestContext = await request.newContext({ baseURL: 'https://some' });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:55:14