Acabo de empezar a programar y me preguntaba si había alguna forma de abrir varias pestañas al mismo tiempo. Actualmente, mi código es algo como esto:
const puppeteer = require("puppeteer"); const rand_url = "https://www.google.com"; async function initBrowser() { const browser = await puppeteer.launch({ headless: false }); const page = await browser.newPage(); await page.goto(rand_url); await page.setViewport({ width: 1200, height: 800, }); return page; } async function login(page) { await page.goto("https://www.google.com"); await page.waitFor(100); await page.type("input[id ='user_login'", "xxx"); await page.waitFor(100); await page.type("input[id ='user_password'", "xxx"); }este no es mi código exacto, reemplazado con diferentes alias, pero entiendes la idea. Me preguntaba si había alguien que conociera el código que permite que este mismo navegador se abra en varias instancias, reemplazando solo la información de inicio de sesión respectiva. Por supuesto, sería genial evitar que mi IP también sea prohibida, por lo que si hubiera una forma de aplicar proxies a cada "navegador"/instancia respectiva, sería perfecto.
Por último, me gustaría saber si el dramaturgo o el titiritero son superiores en la forma en que pueden manejar estas instancias múltiples. Ni siquiera sé si esto es una posibilidad, pero por favor ilumíname. Quiero aprender más.
Hay opciones de creación de perfiles y proxy; Puedes combinarlos para lograr tu objetivo:
Perfil, https://playwright.dev/docs/api/class-browsertype#browser-type-launch-persistent-context
import { chromium } from 'playwright' const userDataDir = /tmp/ + process.argv[2] const browserContext = await chromium.launchPersistentContext(userDataDir) // ...Proxy, https://playwright.dev/docs/api/class-browsertype#browser-type-launch
import { chromium } from 'playwright' const proxy = { /* secret */ } const browser = await chromium.launch({ proxy: { server: 'pre-context' } }) const browserContext = await browser.newContext({ proxy: { server: `http://${proxy.ip}:${proxy.port}`, username: proxy.username, password: proxy.password, } }) // ...Puede utilizar varias ventanas del navegador como diferentes inicios de sesión/cookies.
Para simplificar, puede usar el módulo de puppeteer-cluster de Thomas Dondorf.
Este módulo puede hacer que su titiritero se inicie y se ponga en cola uno por uno para que pueda usarlo para automatizar su inicio de sesión e incluso guardar cookies de inicio de sesión para los próximos lanzamientos.
Siéntase libre de ir a Github: https://github.com/thomasdondorf/puppeteer-cluster
const { Cluster } = require('puppeteer-cluster') (async () => { const cluster = await Cluster.launch({ concurrency: Cluster.CONCURRENCY_CONTEXT, maxConcurrency: 2, // <= this is the number of // parallel task running simultaneously }) // You can change to the number of CPU const cpuNumber = require('os').cpus().length // for example await cluster.task(async ({ page, data: [username, password] }) => { await page.goto('https://www.example.com') await page.waitForTimeout(100) await page.type('input[id ="user_login"', username) await page.waitForTimeout(100) await page.type('input[id ="user_password"', password) const screen = await page.screenshot() // Store screenshot, Save Cookies, do something else }); cluster.queue(['myFirstUsername', 'PassW0Rd1']) cluster.queue(['anotherUsername', 'Secr3tAgent!']) // cluster.queue([username, password]) // username and password array passed into cluster task function // many more pages/account await cluster.idle() await cluster.close() })() Para Playwright, lamentablemente aún no es compatible con el módulo anterior,
puede usar el módulo de grupo de navegadores (clúster) para automatizar el iniciador de Playwright.
Y para el uso de proxy, recomiendo la biblioteca Puppeteer como la legendaria.
No olvides elegir mi respuesta como la correcta, si esto te ayuda.