2017-10-08 1 views
1

Je suis en train de:Comment recréer une page avec tous les cookies?

  1. Visitez une page qui initialise une session
  2. magasin de la session dans un objet JSON
  3. Visitez la même page, qui devrait maintenant reconnaître la session existante

La mise en œuvre que j'ai tenté est la suivante:

import puppeteer from 'puppeteer'; 

const createSession = async (browser, startUrl) => { 
    const page = await browser.newPage(); 

    await page.goto(startUrl); 

    await page.waitForSelector('#submit'); 

    const cookies = await page.cookies(); 
    const url = await page.url(); 

    return { 
    cookies, 
    url 
    }; 
}; 

const useSession = async (browser, session) => { 
    const page = await browser.newPage(); 

    for (const cookie of session.cookies) { 
    await page.setCookie(cookie); 
    } 

    await page.goto(session.url); 
}; 

const run = async() => { 
    const browser = await puppeteer.launch({ 
    headless: false 
    }); 

    const session = await createSession(browser, 'http://foo.com/'); 

    // The session has been established 
    await useSession(browser, session); 
    await useSession(browser, session); 
}; 

run(); 
  1. createSession est utilisé pour capturer les cookies de la page chargée.
  2. useSession devraient charger la page en utilisant les cookies existants.

Cependant, cela ne fonctionne pas - la page session.url ne reconnaît pas la session. Il semble que tous les cookies ne sont pas capturés de cette façon.

Répondre

4

Il semble que page#cookies retourne des cookies avec la configuration session=true,expires=0. setCookie ignore ces valeurs.

J'ai travaillé autour de cela en construisant un nouveau tableau de cookies remplaçant les propriétés expires et session.

const cookies = await page.cookies(); 

const sessionFreeCookies = cookies.map((cookie) => { 
    return { 
    ...cookie, 
    expires: Date.now()/1000 + 10 * 60, 
    session: false 
    }; 
}); 

Au moment d'écrire cette réponse, session propriété est pas documentée. Reportez-vous au numéro suivant https://github.com/GoogleChrome/puppeteer/issues/980.