使用 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')
之后您可以为该页面设置本地存储。
我正在使用 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')
之后您可以为该页面设置本地存储。