如何保存Cookie并将其加载到另一个伪造的会话中?

时间:2019-06-09 13:13:31

标签: cookies puppeteer

在以下示例中,我必须两次请求相同的网页才能在第一个请求中获取Cookie,并在第二个请求中使用它。

有人可以向我展示在一个伪造者会话中保存cookie并在另一个会话中加载它的代码,以便在第二次会话中无需两次请求同一网页吗?谢谢。

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://www.genecards.org/cgi-bin/carddisp.pl?gene=BSCL2');
    await page.goto('https://www.genecards.org/cgi-bin/carddisp.pl?gene=BSCL2');

    const linkHandlers = await page.$x("//div[@id='enhancers']//a[@data-track-event='Table See-All']");

    if (linkHandlers.length > 0) {
        const [response] = await Promise.all([
            page.waitForResponse(response => response.url().includes('/gene/api/data/Enhancers')),
            linkHandlers[0].click()
        ]);
        const resp_text = await response.text();
        console.log(resp_text);
    } else {
        throw new Error("Link not found");
    }
    await browser.close();
})();

1 个答案:

答案 0 :(得分:1)

要保存cookie,可以使用功能page.cookies.。要重复使用cookie,可以使用page.setCookies功能。

将Cookie保存到磁盘

const fs = require('fs').promises;

// ... puppeteer code
const cookies = await page.cookies();
fs.writeFileSync('./cookies.json', JSON.stringify(cookies, null, 2));

这将读取当前URL的cookie,并通过JSON.stringifyfs.writeFile将它们保存到磁盘。

重复使用Cookie

const fs = require('fs').promises;

// ... puppeteer code
const cookiesString = await fs.readFile('./cookies.json');
const cookies = JSON.parse(cookiesString);
await page.setCookie.apply(page, cookies);

要重新使用cookie,请通过fs.readFile从磁盘读取文件。然后通过JSON.parse解析文件内容。之后,您必须调用page.setCookie函数。由于函数期望将cookie作为参数(而不是cookie的一个数组参数),因此我们依赖于apply方法,该方法调用setCookie函数,其中this指向{{1 }}(第一个参数),并使用给定的page参数作为参数。