Как сохранить куки и загрузить их в другой сеанс кукловода? - PullRequest
1 голос
/ 09 июня 2019

Мне пришлось запросить одну и ту же веб-страницу дважды, чтобы получить куки-файлы в первом запросе и использовать их во втором запросе в следующем примере.

Может кто-нибудь показать мне код, чтобы сохранить куки в одном кукловоде?сеанс и загрузить его в другом сеансе, чтобы не было необходимости запрашивать одну и ту же веб-страницу дважды во втором сеансе?Спасибо.

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 Ответ

1 голос
/ 09 июня 2019

Для сохранения файлов cookie вы можете использовать функцию page.cookies. Для повторного использования файлов cookie вы можете использовать функцию page.setCookies.

Сохранить куки на диск

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

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

Это будет считывать куки для текущего URL и сохранять их на диск через JSON.stringify и fs.writeFile.

Повторное использование куки

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

Чтобы повторно использовать куки, прочитайте файлы с диска через fs.readFile. Затем проанализируйте содержимое файла с помощью JSON.parse. После этого вам нужно вызвать функцию page.setCookie. Поскольку функция ожидает файлы cookie в качестве аргументов (а не как один аргумент массива с файлами cookie), мы полагаемся на метод apply, который вызывает функцию setCookie с this, указывающим на page (первые аргументы) и с указанным cookies аргументом в качестве аргументов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...