使用 Puppeteer 访问 localStorage,无需 url

Jar*_*red 5 permissions local-storage node.js puppeteer

我正在创建一个新页面page = browser.newPage()page.setContent(...)然后我设置包含脚本的html 内容。

脚本加载后,我对其进行调用,该调用会尝试使用该脚本,或者localStorage在此时我收到访问被拒绝错误:

Error: Evaluation failed: DOMException: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.

根据我的理解,这是因为为了写入 localStorage,必须有一个原始集 - 在我的情况下我没有。

如果我将代码更改为首先导航到 url page.goto('http://localhost'),然后执行 html 注入,则我可以毫无问题地写入 localStorage。

有没有一种方法可以写入 localStorage 而无需先访问现有 URL?

小智 4

对于任何未来为此苦苦挣扎的人。无法在没有来源的情况下设置本地存储数据。如果您无法导航到某个页面,则可以使用此处描述的请求拦截。这也比调用网络中的随机页面要快得多。

await page.setRequestInterception(true)
page.on('request', request => {
  request.respond({ status: 200, contentType: 'text/html', body: '' })
})
await page.goto('http://127.0.0.1')
Run Code Online (Sandbox Code Playgroud)

之后,您就可以设置该页面的本地存储。