如何保存cookies并将其加载到另一个木偶师会话中?

如何保存cookies并将其加载到另一个木偶师会话中?,cookies,puppeteer,Cookies,Puppeteer,在下面的示例中,我必须两次请求相同的网页,才能在第一次请求中获取cookies,并在第二次请求中使用它 有谁能告诉我在一个木偶游戏会话中保存cookies并在另一个会话中加载cookies的代码,这样就不需要在第二个会话中两次请求相同的网页了?谢谢 const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = awa

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

有谁能告诉我在一个木偶游戏会话中保存cookies并在另一个会话中加载cookies的代码,这样就不需要在第二个会话中两次请求相同的网页了?谢谢

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();
})();

要保存cookies,您可以使用函数重用cookies,您可以使用函数

将cookies保存到磁盘

const fs=require('fs')。承诺;
// ... 木偶演员代码
const cookies=等待页面。cookies();
等待fs.writeFile('./cookies.json',json.stringify(cookies,null,2));
这将读取当前URL的cookie,并通过
JSON.stringify
fs.writeFile
将它们保存到磁盘

重用cookies

const fs=require('fs')。承诺;
// ... 木偶演员代码
const cookiesString=wait fs.readFile('./cookies.json');
const cookies=JSON.parse(CookieString);
等待page.setCookie(…cookies);

要重用cookie,请通过
fs.readFile
从磁盘读取文件。然后通过
JSON.parse
解析文件内容。之后,您必须调用
page.setCookie
函数。由于函数期望Cookie作为参数(而不是作为Cookie的一个数组参数),因此我们依赖,它允许使用给定的
Cookie
数组作为单个参数调用
setCookie
函数。

谢谢,但不幸的是,这似乎不适用于最新版本的Puppeter。
fs.writeFileSync
导致:
错误:TypeError:无法读取未定义的属性“writeFileSync”
您有什么建议如何解决此问题吗?实际上,我创建了一个可以解决此问题的。如果我用
节点运行它,我会得到同样的错误。@RocketNuts谢谢你的提示,我在那里犯了一个错误,把旧的fs-API和新的promissions-API混在了一起。代码现在已经更新了。谢谢,在进行实验的同时,我也注意到,当我刚刚执行
const fs=require('fs')时,它似乎起了作用位于顶部(不带
.promises
)。我甚至不知道那是什么意思。是否有理由选择
writeFile
而不是
writeFileSync
或者反之亦然?这不会保存或恢复HttpOnly cookies,因此它不是保持会话等的完整解决方案。