使用Puppeteer访问localStorage并且没有url

时间:2018-01-15 14:11:17

标签: node.js permissions local-storage 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,必须有一个原点集 - 在我的情况下我不会。

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

有没有办法在不必先点击现有网址的情况下写入localStorage?

2 个答案:

答案 0 :(得分:2)

对于将来为此而苦苦挣扎的任何人。无法在没有来源的情况下设置本地存储数据。如果您无法导航到某个页面,则可以使用 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')

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

答案 1 :(得分:0)

我不确定这是你问的问题,但你试过userDataDir吗? 例如

userDataDir:"/test"
启动选项中的