Solución:
No puedo decirlo con certeza, pero como Puppeteer es “solo” un contenedor para el Protocolo de DevTools de Chrome (cdp), y cpd no tiene un “comando” nativo que haga lo que estás pidiendo, no es posible hacerlo. por todo el asunto.
Pero tienes opciones. Una buena opción es reutilizar el mismo navegador para el siguiente script. Solo necesita pasar la opción “userDataDir” al comando puppeteer.launch. Ejemplo: puppeteer.launch({ userDataDir: '/tmp/myChromeSession' });
. Cada script de titiritero que use esto usará el mismo navegador, por lo que compartirán las cookies “permanentes”. Las cookies de “sesión” (o las que tienen un tiempo de vencimiento) seguramente se eliminan, pero esta es la forma en que se supone que funcionan las cookies.
Extracto sobre el directorio de datos de usuario:
El directorio de datos del usuario contiene datos de perfil como historial, marcadores y cookies, así como otro estado local por instalación.
A pesar de que esta referencia no escribe nada sobre el almacenamiento web, también se conserva en el directorio de datos de usuario. Entonces, usando esta opción, está listo para comenzar. Creo que es la mejor opción para tu caso.
También tiene otras opciones, como copiar solo las cookies y el almacenamiento (localStorage y sessionStorage).
Copiar cookies con titiritero
Con titiritero, este proceso es muy doloroso: debe especificar cada origen desde el que desea cooperar las cookies. Por ejemplo, si su sitio incluye elementos de terceros, como el inicio de sesión o el seguimiento de Google, debe copiar las cookies de “google.com”, “.google.com”, “www.google.com”, etc. Es muy muy tonto y doloroso. De todos modos, para copiar el origen de las cookies https: // abc, emita: const abcCookies = await page.cookies('https://a.b.c');
Para restaurarlos: await page.setCookie(...abcCookies);
. Como son json, puede serializarlos y guardarlos en el disco para restaurarlos más tarde.
Copia de cookies usando CDP
let { cookies } = await page._client.send('Network.getAllCookies');
Referencia: Network.getAllCookies
Para restaurarlos, utilice el método cdp Network.setCookies. Nuevamente, puede serializar esas cookies y guardarlas en el disco para restaurarlas más tarde.
Copia de almacenamiento (localStorage y sessionStorage)
Puede transferir su propio almacenamiento de origen a través de const ls = await page.evaluate(() => JSON.stringify(localStorage));
y const ss = await page.evaluate(() => JSON.stringify(sessionStorage));
. Sin embargo, no puede acceder a Almacenamientos de otros orígenes por motivos de seguridad. No conozco el equivalente de CDP y creo que aún no existe.
Caché web
Si su sitio tiene un trabajador de servicio, es probable que guarde cosas en la API de Web Cache. No sé si tiene algún sentido guardar estos datos en caché, pero si es importante para usted, también puede transferir estos caché, pero sin usar apis puppeteer o cdp. Debe usar la API de Cache usted mismo y transferir la caché usando page.evaluate.
IndexedDB
Si desea copiar el contenido de IndexedDB, puede utilizar los métodos de dominio cdp IndexedDB (como “IndexedDB.requestData”) para obtener los datos de cualquier origen, pero no puede configurar / restaurar estos datos. 🙂 Sin embargo, puede, en su propio origen, restaurar los datos mediante programación usando page.evaluate.