Hay muy poca información disponible y he intentado varias cosas, pero aparentemente no hay forma de saber de Puppeteer si la ventana es diferente, por ejemplo, si muevo manualmente una "pestaña" (no en headless) afuera, esto crea una nueva ventana, aparentemente no hay forma de saberlo o tener un concepto de Windows en Puppeteer, ¿alguien puede arrojar luz sobre esto?
No deseo abrir más instancias de Chromium, ya que quiero seguir con el mismo perfil (sin copia), quiero tratar con varias ventanas (no con pestañas).
Selenium tiene una forma clara de manejar eso usando getWindowHandle
Actualmente, Puppeteer no ofrece una API para hacer eso. El Protocolo Chrome DevTools (CDP) subyacente podría ofrecer lo que necesita. Consulte el parámetro newWindow de Target.createTarget https://chromedevtools.github.io/devtools-protocol/tot/Target/#method-createTarget . Debería ser posible obtener acceso a CDP y crear una nueva ventana de la siguiente manera:
// pseudo-code, not tested if it works. const client = await browser.target().createCDPSession(); const {targetId} = await client.send('Target.createTarget', { url: ..., newWindow: true }); const newTarget = await browser.waitForTarget(target => target.id === targetId); Parece newWindow solo tiene efecto en modo headful.
Puedes probar titiritero-cluster .
Así es como se ve el ejemplo:
const { Cluster } = require('puppeteer-cluster'); (async () => { const cluster = await Cluster.launch({ concurrency: Cluster.CONCURRENCY_CONTEXT, maxConcurrency: 2, }); await cluster.task(async ({ page, data: url }) => { await page.goto(url); const screen = await page.screenshot(); // Store screenshot, do something else }); cluster.queue('http://www.google.com/'); cluster.queue('http://www.wikipedia.org/'); // many more pages await cluster.idle(); await cluster.close(); })();