javascript - localStorage 与 Puppeteer 的奇怪行为

标签 javascript reactjs google-chrome local-storage puppeteer

我正在尝试将 localStorage 保存到 page.evaluate() 之外的变量中。但似乎我做不到。下面是我尝试使用的代码和 consloe.log() 的输出,我如何让它工作并将 localStorage 保存到变量?在回调中我可以看到 localStorage,但它不正常,因为 getItem 不工作。

我正在尝试多种方法来获取数据,但似乎都不起作用...知道为什么吗?

await page.click("[id=Login-button]");

let savedLocalStorage = "";

const result = await page.evaluate(savedLocalStorage => {
console.log(localStorage); //output: {AUTH: 12345}

console.log(localStorage.key(0)); //output: null

console.log(localStorage.getItem("AUTH")); //output: null

localStorage.setItem("Test", "1234"); //working

console.log(localStorage); //output: {AUTH: 12345, Test: 1234}

savedLocalStorage = localStorage;

//savedLocalStorage = localStorage.AUTH; - same result as savedLocalStorage = localStorage;

return localStorage;
}, savedLocalStorage);

console.log(savedLocalStorage); //output: ""

console.log(result); //output: {}

最佳答案

尝试序列化数据,:

    async function saveLocalStorage(page, filePath) {
      const json = await page.evaluate(() => {
        const json = {};
        for (let i = 0; i < localStorage.length; i++) {
          const key = localStorage.key(i);
          json[key] = localStorage.getItem(key);
        }
        return json;
      });
      fs.writeFileSync(filePath, 'utf8', JSON.stringify(json));
    }

    async function restoreLocalStorage(page, filePath) {
      const json = JSON.parse(fs.readFileSync(filePath, 'utf8'));
      await page.evaluate(json => {
        localStorage.clear();
        for (let key in json)
          localStorage.setItem(key, json[key]);
      }, json);
    }

https://github.com/GoogleChrome/puppeteer/issues/727

关于javascript - localStorage 与 Puppeteer 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54932707/

相关文章:

php - 通过 iFrame 进行链接

javascript - 如何将日期字符串中的外国月份转换为英文

reactjs - TypeScript React 谷歌地图 : 'google' does not exist

reactjs - 使用 Deeplinking 和 React-Navigation-5 获取前缀后的所有内容作为参数

'overflow-y:auto' 的 CSS 问题在 Chrome 中产生了问题,但在 Firefox 中没有

javascript - Chrome JavaScript 已关闭

javascript - 如何在 Chrome 中关闭特定网站的缓存?

javascript - 有没有javascript数据表格组件把列显示为行?

javascript - 设置间隔() : How to stop then start itself again?

javascript - 如何使用 API 内部的 API URL 将对象添加到数组中?