使用 Puppeteer 访问 localStorage 而没有 url

Accessing localStorage with Puppeteer and no url

我正在使用 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,必须有一个 origin 集——在我的例子中我没有。

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

有没有一种方法可以写入 localStorage 而不必先点击现有的 URL?

我不确定这是否是您要问的,但您尝试过 userDataDir 了吗? 例如

userDataDir:"/test"

在启动选项中

对于将来遇到此问题的任何人。无法在没有来源的情况下设置本地存储数据。如果您无法导航到某个页面,您可以使用 here 中描述的请求拦截。这也比调用网络中的随机页面快很多。

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

之后您可以为该页面设置本地存储。