在JSON中保存了一些报废的cookie之后,我想在新的Session中恢复它们。 Cookie对象似乎可以正常加载。
async function injectCookies(page) {
let data = await fs.promises.readFile(path.join(__dirname, process.env.COOKIE_FILE), { encoding: "UTF-8" });
if (data) {
try {
console.log('setting cookies');
//JSON.parse(data)[0] returns a Cookie-Object
await page.setCookie(...JSON.parse(data));
console.log(await page.cookies()); //Yields []
return Promise.resolve();
} catch (err) {
if (err instanceof SyntaxError) {
console.log('cookies.json > JSON corrupt');
} else {
console.log(err);
}
}
}
}
MainFunction:
async function start() {
let browser = await puppeteer.launch(browserConfig);
let page = await browser.newPage();
await injectCookies(page);
// await page.goto("https://www.google.com");
await saveCookies(page);
}
(saveCookies使用page.cookies()和JSON.stringify())
在尝试设置它们之前记录的cookie:
[ { name: '1P_JAR',
value: '2019-08-25-20',
domain: '.google.com',
path: '/',
expires: 1569356838.739606,
size: 19,
httpOnly: false,
secure: false,
session: false },
{ name: 'CONSENT',
value: 'WP.27d849',
domain: '.google.com',
path: '/',
expires: 2145916800.363398,
size: 16,
httpOnly: false,
secure: false,
session: false }]
答案 0 :(得分:1)
answer here说了关于await page.cookies([... urls])。
如果未指定URL,则此方法返回当前的cookie 页面网址。如果指定了URL,则仅这些URL的cookie 返回。
您需要先打开一个页面。因为使用await page.cookies()
,您可以获得当前页面URL的cookie。您的情况下没有打开的页面,因此您的Cookie数组为空。
将您的Main函数更新为,可能会有所帮助。
async function start() {
let browser = await puppeteer.launch(browserConfig);
let page = await browser.newPage();
await page.goto("https://www.google.com");
await injectCookies(page);
await saveCookies(page);
}