Куки пропали после перезагрузки Puppeteer => page.setCookie (... куки) - PullRequest
0 голосов
/ 24 августа 2018

Я видел некоторые проблемы на Github с методом page.setCookie(...cookies).

Мне было интересно, сможет ли кто-нибудь сохранить файл cookie с помощью этого метода. Я уже видел обходные пути (но это не мой вопрос)

В этом коде я просто устанавливаю cookie, а затем перезагружаю страницу. С перезагрузкой страницы куки больше нет. Я пытался удалить expires, установить его на 0, 1, -1 или на метку времени Unix в будущем .... Не работает

const puppeteer = require('puppeteer');

const OPT = {
    headless: false,
    args: ['--no-sandbox', '--disable-setuid-sandbox', '--user-data-dir']
};

const COOKS =
    [ { name: 'tdsess',
        value: 'TEST_DRIVE_SESSION',
        domain: 'testing-ground.scraping.pro',
        path: '/',
        expires: -1,
        size: 24,
        httpOnly: false,
        secure: false,
        session: true } ];

(async () => {
    const URL = `http://testing-ground.scraping.pro/login`
    const browser = await puppeteer.launch(OPT)
    const page = await browser.newPage()
    await page.goto(URL, { 'waitUntil' : 'networkidle2' })

    await page.setCookie(...COOKS)
    let cook = await page.cookies()

    console.log(`==== first login ====`)
    console.log(cook)
    console.log(`==================`)

    await page.reload()
    console.log(`after reload`)
    setInterval(async () => {
        cook = await page.cookies()
        console.log(cook)
    }, 3000)
})()

Будет выведено:

==== first login ====
[ { name: 'tdsess',
    value: 'TEST_DRIVE_SESSION',
    domain: 'testing-ground.scraping.pro',
    path: '/',
    expires: -1,
    size: 24,
    httpOnly: false,
    secure: false,
    session: true } ]
==================
after reload
[]
[]

Версии, которые я использовал:

* Кукольник 1.7.0 * Узлы 10.8.0 *

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Я не посетил правильный URL для страницы входа в систему

http://testing-ground.scraping.pro/login?mode=welcome

После посещения этой страницы все выглядит хорошо.

const puppeteer = require('puppeteer');

const OPT = {
    headless: false,
    args: ['--no-sandbox', '--disable-setuid-sandbox', '--user-data-dir']
};

const COOKS =
    [ { name: 'tdsess',
        value: 'TEST_DRIVE_SESSION',
        domain: 'testing-ground.scraping.pro',
        path: '/',
        expires: -1,
        size: 24,
        httpOnly: false,
        secure: false,
        session: true } ];

(async () => {
    const URL = `http://testing-ground.scraping.pro/login?mode=welcome`
    const browser = await puppeteer.launch(OPT)
    const page = await browser.newPage()
    await page.setCookie(...COOKS)
    await page.goto(URL, { 'waitUntil' : 'networkidle2' })


    let cook = await page.cookies()

    console.log(`==== first login ====`)
    console.log(cook)
    console.log(`==================`)

    await page.reload()
    console.log(`after reload`)
    setInterval(async () => {
        cook = await page.cookies()
        console.log(cook)
    }, 3000)
})()
0 голосов
/ 26 августа 2018

Ответ на этот вопрос скрыт в path: '/' в настройках cookie.

Если вы установите его на path: '/login' (поскольку вы пытаетесь зарегистрировать его на маршруте http://testing-ground.scraping.pro/login), он должен зарегистрироваться правильно и быть доступным при повторных посещениях.

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