Get API Key

Dynamic web scraping for pages that load their data later

Infinite feeds, "load more" buttons and pages built by JavaScript hand a plain request an empty shell. Gologin Cloud Browser loads them the way a person's browser does, so your Playwright or Puppeteer script collects everything that appears.

Free to start, no card. Residential IPs included.

4.7 / 5 on G2from 79 reviews

Dynamic web scraping: plain request, headless Chrome or a cloud browser

A plain request reads the HTML the server sends. Dynamic pages send the data later, through JavaScript, scrolling and clicks. Here is what each approach gets back.

What a plain HTTP request, headless Chrome and Gologin Cloud Browser get back from a dynamic page
What you get backGologinPlain HTTP requestHeadless Chrome
Content built by JavaScriptYesNoYes
Infinite scroll and "load more"YesNoYes
Content that loads seconds laterYesNoYes
Residential IP includedYesNoNo
Same session on the next runYesNoNo
Servers to runNoneNoneYours

Only need the rendered page, not a session? Web Unlocker returns it in one request and bills only on success.

How to scrape a dynamic website with Playwright, Puppeteer or Python

Connect your script to Gologin Cloud Browser in one line, wait for the content, then scroll until nothing new appears. The code below collected all 100 quotes from an infinite-scroll test page.

  1. Step 01

    Get your token

    Sign up with Google and copy your key from the dashboard. Free, no card.

  2. Step 02

    Create a profile

    One click in the dashboard, or one API call. The profile keeps the device, the IP and the login.

  3. Step 03

    Run the script

    Install the library and run the script below with your token and profile id. It scrolls until no new quotes load, then collects each one with its author. More in the getting started guide.

Install
npm install playwright-core
Run
GOLOGIN_TOKEN=your_token GOLOGIN_PROFILE_ID=your_profile_id node scrape.mjs
Connects to
wss://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();

Plans & Pricing

Every plan runs the same browser, with residential IPs included. Plans differ in browser hours and parallel sessions.

Need more at once? Add parallel sessions to any plan for $2 a month each, as many as you need. Proxy traffic beyond your allowance is $1/GB.

Custom

From 4 parallel sessions, with a dedicated account manager, a premium SLA and tailored onboarding.

Get a personal demo

Part of the complete tech stack

One account, one proxy network, one ecosystem. Pick the product the job needs.

Dynamic web scraping questions

What is dynamic web scraping?

Collecting data from pages that build their content in the browser: feeds, search results, prices or reviews that appear after the page loads, on scroll or after a click. You need a real browser to run the page before you can read it.

Why does my scraper return empty HTML on JavaScript sites?

The server sends a shell and the data arrives later through JavaScript. A plain request stops at the shell, so the data is never there to parse. Load the page in a browser and wait for the element you need, as the scripts above do.

Do I need Cloud Browser or Web Unlocker?

Use Web Unlocker when you need the rendered page from a URL: one request, billed only when it succeeds. Use Cloud Browser when the job needs a session: scrolling a feed, clicking through pages, staying logged in between runs.

How do I scrape infinite scroll?

Scroll to the bottom, wait for new items to appear, and repeat until the count stops growing. The scripts above do exactly that and stop on their own when nothing new loads.

Can I scrape pages behind a login?

Yes. Log in once in a profile and the session stays with it: reconnect later and you are still signed in. Need one login across several browsers? See Scraping browser. Only collect data you are allowed to access.

Can I do dynamic web scraping in Python?

Yes. Python Playwright connects to the same address with connect_over_cdp, and the Python tab above has the full script. Install it with pip install playwright; no local browser download is needed, because the browser runs in the cloud.

Scrape the data that loads after the page.

Connect your Playwright or Puppeteer script in one line, and collect what a real browser sees.

Free to start, no card. Residential IPs included.

4.7 / 5 on G2from 79 reviews