编剧:无法从 Window 读取 localStorage 属性:拒绝访问此文档

Playwright: Failed to Read the localStorage property from Window: Access is denied for this document

我有这个脚本来修改我的浏览器实例的 localStorage(假设所有定义都正确)。它 returns 这个错误。我有一种感觉,这是因为 Playwright 正在以隐身模式启动浏览器。有没有办法让我以正常模式启动浏览器?

脚本:

const rdlocalStorage = fs.readFileSync('localstorage.json','utf8');
    const deserializedStorage = JSON.parse(rdlocalStorage);
    console.log (deserializedStorage);
    await page.evaluate((deserializedStorage)=>{
        for (const key in deserializedStorage){
            localStorage.setItem(key,deserializedStorage[key]);
        }
    }, deserializedStorage);

错误信息 enter image description here

我不知道为什么会出现您的错误,但也许我有其他选择。 Playwright 有一个 API 可以为您恢复 cookie 和本地存储,您无需编写代码。

context.storageState 是允许您捕获 cookie、本地存储等的方法。您可以等待并使用 return 值作为对象,或者(等待并)保存存储状态到文件。

通过 browser.newContext 方法的选项参数上的 storageState 属性 创建新的浏览器上下文时恢复存储状态。您可以将 storageState 对象或存储状态文件的路径传递给它。

也可以使用这些相同的对象和文件in the @playwright/test runner

唯一没有存储在存储状态的是会话存储(本地存储的'brother')。根据 Playwright 文档,它不经常用于身份验证状态,因此他们没有 'native' 方法来保存和恢复它。但他们确实描述了 how to deal with session storage 以备不时之需。