我正在尝试将 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);
}
关于javascript - localStorage 与 Puppeteer 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54932707/