在以下示例中,我必须两次请求相同的网页才能在第一个请求中获取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();
})();
答案 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.stringify
和fs.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
参数作为参数。