¿Hay alguna forma de "almacenar en caché" un valor en las funciones basadas en navegador de Puppeteer?
La devolución de llamada pasada a page.waitForFunction( .. ) se ejecuta en cada DOMMutation desde la opción de polling: "mutation" . Por lo tanto, podría ejecutarse potencialmente 500 veces y ejecutar const listEl = document.querySelector("#list") 500 times .
Me preguntaba si hay una manera de almacenar en caché listEl cuando se encuentra, de modo que la próxima vez que se invoque la devolución de llamada, querySelector("#listEl") no tenga que ejecutarse nuevamente y se use el valor almacenado en caché dentro listEl .
await page.waitForFunction( () => { const listEl = document.querySelector("#list"); }, { polling: "mutation", } ); })(); La devolución de llamada dentro waitForFunction( ..) no tiene acceso a variables fuera de la función. Porque la devolución de llamada se ejecuta (inyectada) dentro del contexto del navegador y el entorno externo es node.js.
Bueno, podrías usar localStorage . Dado que el puppeteer utiliza chromium , se localStorage .
await page.evaluate(() => { localStorage.setItem('key', 'value'); }); Incluso podría pasar el valor localStorage a través de diferentes ejecuciones en un mismo dominio a través de la opción de inicio userDataDir .
const browser = await puppeteer.launch({ userDataDir: './temp/', // ... });Podrías convertirlo en una propiedad de ventana:
window.listEl = window.listEl || document.querySelector("#list")