无法在人偶中设置Cookie

时间:2019-08-25 21:01:30

标签: javascript cookies puppeteer

在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 }]

1 个答案:

答案 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);
}