Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to save cookies and load it in another puppeteer session?

I had to request the same webpage twice to get the cookies in the 1st request and use it in the 2nd request in the following example.

Could anybody show me the code to save the cookies in one puppeteer session and load it in another session so that there is no need to request the same webpage twice in the 2nd session? Thanks.

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(); })(); 
like image 236
user1424739 Avatar asked Jun 09 '19 13:06

user1424739


People also ask

How do you make cookies on a puppeteer?

setCookie() method in puppeteer to set cookies for any website. Remember, you need to first navigate to a page via Puppeteer before you can set cookies on a particular website. So, always use the page. goto() first and then set cookies.

What do you store in session cookies?

This cookie stores information such as the user's input and tracks the movements of the user within the website. There is no other information stored in the session cookie. Session cookies are set on a device's temporary memory when a browser session starts.


1 Answers

To save the cookies, you can use the function page.cookies. To reuse the cookies, you can use the page.setCookies function.

Save cookies to disk

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

This will read the cookies for the current URL and save them to disk via JSON.stringify and fs.writeFile.

Reuse cookies

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

To reuse the cookies, read the files from the disk via fs.readFile. Then parse the file content via JSON.parse. After that you have to call the page.setCookie function. As the function expects the cookies as arguments (and not as one array argument with cookies), we rely on the spread operator, which allows to call the setCookie function with the given cookies array as individual arguments.

like image 77
Thomas Dondorf Avatar answered Sep 21 '22 15:09

Thomas Dondorf