Feeds infinitos, listas com "carregar mais" e páginas montadas por JavaScript entregam a uma requisição simples só uma casca vazia. O Gologin Cloud Browser as carrega do jeito que o navegador de uma pessoa carrega, então seu script Playwright ou Puppeteer coleta tudo o que aparece.
Comece grátis, sem cartão. IPs residenciais incluídos.
Uma requisição simples lê o HTML que o servidor envia. Páginas dinâmicas enviam os dados depois, por JavaScript, rolagem e cliques. Veja o que cada abordagem consegue.
| O que você obtém | Requisição HTTP simples | Chrome headless | |
|---|---|---|---|
| Conteúdo montado por JavaScript | Sim | Não | Sim |
| Rolagem infinita e "carregar mais" | Sim | Não | Sim |
| Conteúdo que carrega segundos depois | Sim | Não | Sim |
| IP residencial incluído | Sim | Não | Não |
| Mesma sessão na próxima execução | Sim | Não | Não |
| Servidores para manter | Nenhum | Nenhum | Os seus |
Só precisa da página renderizada, não de uma sessão? O Web Unlocker a retorna em uma requisição e cobra só quando dá certo.
Conecte seu script ao Gologin Cloud Browser com uma linha, espere o conteúdo e role até não aparecer nada novo. O código abaixo coletou todas as 100 citações de uma página de teste com rolagem infinita.
Cadastre-se com o Google e copie sua chave no painel. Grátis, sem cartão.
Um clique no painel ou uma chamada de API. O perfil guarda o dispositivo, o IP e o login.
Instale a biblioteca e rode o script abaixo com seu token e o ID do perfil. Ele rola até não carregar mais nenhuma citação e depois coleta cada uma com o seu autor. Mais no guia de primeiros passos.
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 os planos rodam o mesmo navegador, com IPs residenciais incluídos. Os planos diferem em horas de navegador e sessões paralelas.
$0
Sem cartão
$4.50/ mês
Para devs solo
$8/ mês
Para equipes em crescimento
$14/ mês
Para operações críticas
Precisa de mais ao mesmo tempo? Adicione sessões paralelas a qualquer plano por $2 por mês cada, quantas precisar. O tráfego de proxy além da sua franquia custa $1/GB.
A partir de 4 sessões paralelas, com gerente de conta dedicado, SLA premium e onboarding sob medida.
Uma conta, uma rede de proxies, um ecossistema. Escolha o produto de que a tarefa precisa.
Coletar dados de páginas que montam o conteúdo no navegador: feeds, resultados de busca, preços ou avaliações que aparecem depois que a página carrega, ao rolar ou após um clique. Você precisa de um navegador real para executar a página antes de conseguir lê-la.
O servidor envia uma casca e os dados chegam depois, por JavaScript. Uma requisição simples para na casca, então os dados nunca estão lá para serem extraídos. Carregue a página em um navegador e espere pelo elemento de que precisa, como fazem os scripts acima.
Use o Web Unlocker quando você precisa da página renderizada a partir de uma URL: uma requisição, cobrada só quando dá certo. Use o Cloud Browser quando a tarefa precisa de uma sessão: rolar um feed, clicar entre páginas, continuar logado entre as execuções.
Role até o fim, espere novos itens aparecerem e repita até a contagem parar de crescer. Os scripts acima fazem exatamente isso e param sozinhos quando nada novo carrega.
Sim. Faça login uma vez em um perfil e a sessão fica com ele: reconecte depois e você continua logado. Precisa de um login em vários navegadores? Veja Navegador para scraping. Colete apenas dados que você tem permissão para acessar.
Sim. O Playwright para Python se conecta ao mesmo endereço com connect_over_cdp, e a aba Python acima tem o script completo. Instale com pip install playwright; não é preciso baixar um navegador local, porque o navegador roda na nuvem.
Conecte seu script Playwright ou Puppeteer com uma linha e colete o que um navegador real vê.
Comece grátis, sem cartão. IPs residenciais incluídos.