Los feeds infinitos, los botones de "cargar más" y las páginas creadas con JavaScript devuelven una estructura vacía a una solicitud simple. Gologin Cloud Browser las carga como lo hace el navegador de una persona, así que tu script de Playwright o Puppeteer recoge todo lo que aparece.
Gratis para empezar, sin tarjeta. IP residenciales incluidas.
Una solicitud simple lee el HTML que envía el servidor. Las páginas dinámicas envían los datos después, mediante JavaScript, desplazamiento y clics. Esto es lo que obtiene cada enfoque.
| Lo que obtienes | Solicitud HTTP simple | Chrome headless | |
|---|---|---|---|
| Contenido creado con JavaScript | Sí | No | Sí |
| Scroll infinito y "cargar más" | Sí | No | Sí |
| Contenido que carga segundos después | Sí | No | Sí |
| IP residencial incluida | Sí | No | No |
| La misma sesión en la siguiente ejecución | Sí | No | No |
| Servidores que mantener | Ninguno | Ninguno | Los tuyos |
¿Solo necesitas la página renderizada, no una sesión? Web Unlocker la devuelve en una solicitud y solo cobra cuando tiene éxito.
Conecta tu script a Gologin Cloud Browser con una línea, espera al contenido y desplázate hasta que no aparezca nada nuevo. El código de abajo recogió las 100 citas de una página de prueba con scroll infinito.
Regístrate con Google y copia tu clave desde el panel. Gratis, sin tarjeta.
Un clic en el panel o una llamada a la API. El perfil guarda el dispositivo, la IP y el inicio de sesión.
Instala la biblioteca y ejecuta el script de abajo con tu token y el id de tu perfil. Se desplaza hasta que no cargan más citas y después recoge cada una con su autor. Más información en la guía de inicio.
npm install playwright-coreGOLOGIN_TOKEN=your_token GOLOGIN_PROFILE_ID=your_profile_id node scrape.mjswss://cloudbrowser.gologin.com/connect?token=…&profile=…import { chromium } from "playwright-core";
const token = process.env.GOLOGIN_TOKEN;
const profileId = process.env.GOLOGIN_PROFILE_ID;
const endpoint = `wss://cloudbrowser.gologin.com/connect?token=${token}&profile=${profileId}`;
const browser = await chromium.connectOverCDP(endpoint);
const page = await browser.contexts()[0].newPage();
await page.goto("http://quotes.toscrape.com/scroll");
await page.waitForSelector(".quote");
for (let i = 0; i < 30; i++) {
const before = await page.locator(".quote").count();
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
try {
await page.waitForFunction(
(n) => document.querySelectorAll(".quote").length > n,
before,
{ timeout: 3000 }
);
} catch {
break;
}
}
const quotes = await page.$$eval(".quote", (els) =>
els.map((el) => ({
text: el.querySelector(".text")?.textContent,
author: el.querySelector(".author")?.textContent,
}))
);
console.log(quotes.length, quotes[0]);
await page.close();
await browser.close();npm install puppeteer-coreGOLOGIN_TOKEN=your_token GOLOGIN_PROFILE_ID=your_profile_id node scrape.mjswss://cloudbrowser.gologin.com/connect?token=…&profile=…import puppeteer from "puppeteer-core";
const token = process.env.GOLOGIN_TOKEN;
const profileId = process.env.GOLOGIN_PROFILE_ID;
const endpoint = `wss://cloudbrowser.gologin.com/connect?token=${token}&profile=${profileId}`;
const browser = await puppeteer.connect({ browserWSEndpoint: endpoint });
const page = await browser.newPage();
await page.goto("http://quotes.toscrape.com/scroll");
await page.waitForSelector(".quote");
for (let i = 0; i < 30; i++) {
const before = await page.$$eval(".quote", (els) => els.length);
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
try {
await page.waitForFunction(
(n) => document.querySelectorAll(".quote").length > n,
{ timeout: 3000 },
before
);
} catch {
break;
}
}
const quotes = await page.$$eval(".quote", (els) =>
els.map((el) => ({
text: el.querySelector(".text")?.textContent,
author: el.querySelector(".author")?.textContent,
}))
);
console.log(quotes.length, quotes[0]);
await page.close();
await browser.disconnect();pip install playwrightGOLOGIN_TOKEN=your_token GOLOGIN_PROFILE_ID=your_profile_id python scrape.pywss://cloudbrowser.gologin.com/connect?token=…&profile=…import os
from playwright.sync_api import sync_playwright, TimeoutError as PlaywrightTimeoutError
token = os.environ["GOLOGIN_TOKEN"]
profile_id = os.environ["GOLOGIN_PROFILE_ID"]
endpoint = f"wss://cloudbrowser.gologin.com/connect?token={token}&profile={profile_id}"
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint)
page = browser.contexts[0].new_page()
page.goto("http://quotes.toscrape.com/scroll")
page.wait_for_selector(".quote")
for _ in range(30):
before = page.locator(".quote").count()
page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
try:
page.wait_for_function(
"n => document.querySelectorAll('.quote').length > n",
arg=before,
timeout=3000,
)
except PlaywrightTimeoutError:
break
quotes = page.eval_on_selector_all(
".quote",
"els => els.map(el => ({text: el.querySelector('.text')?.textContent, author: el.querySelector('.author')?.textContent}))",
)
print(len(quotes), quotes[0])
page.close()
browser.close()Todos los planes usan el mismo navegador, con IP residenciales incluidas. Los planes se diferencian en horas de navegador y sesiones en paralelo.
$0
Sin tarjeta
$4.50/ mes
Para un solo desarrollador
$8/ mes
Para equipos en crecimiento
$14/ mes
Para operaciones críticas
¿Necesitas más a la vez? Añade sesiones en paralelo a cualquier plan por $2 al mes cada una, tantas como necesites. El tráfico de proxy por encima de tu cuota cuesta $1/GB.
Desde 4 sesiones en paralelo, con un gestor de cuenta dedicado, un SLA premium y una incorporación a medida.
Una cuenta, una red de proxies, un ecosistema. Elige el producto que necesita cada tarea.
Recoger datos de páginas que construyen su contenido en el navegador: feeds, resultados de búsqueda, precios o reseñas que aparecen después de cargar la página, al desplazarse o tras un clic. Necesitas un navegador real que ejecute la página antes de poder leerla.
El servidor envía una estructura vacía y los datos llegan después mediante JavaScript. Una solicitud simple se queda en esa estructura, así que los datos nunca están ahí para analizarlos. Carga la página en un navegador y espera al elemento que necesitas, como hacen los scripts de arriba.
Usa Web Unlocker cuando necesites la página renderizada a partir de una URL: una solicitud, que solo se cobra si tiene éxito. Usa Cloud Browser cuando la tarea necesite una sesión: desplazarse por un feed, hacer clic entre páginas o mantener la sesión iniciada entre ejecuciones.
Desplázate hasta el final, espera a que aparezcan elementos nuevos y repite hasta que el número deje de crecer. Los scripts de arriba hacen exactamente eso y se detienen solos cuando no carga nada nuevo.
Sí. Inicia sesión una vez en un perfil y la sesión se queda en él: vuelve a conectarte más tarde y seguirás con la sesión iniciada. ¿Necesitas un mismo inicio de sesión en varios navegadores? Consulta Navegador para scraping. Recoge solo datos a los que tengas permiso para acceder.
Sí. Playwright para Python se conecta a la misma dirección con connect_over_cdp, y la pestaña Python de arriba tiene el script completo. Instálalo con pip install playwright; no hace falta descargar un navegador local, porque el navegador funciona en la nube.
Conecta tu script de Playwright o Puppeteer con una línea y recoge lo que ve un navegador real.
Gratis para empezar, sin tarjeta. IP residenciales incluidas.