---
title: "Browser"
description: "Browser on Zenrows. Connect with Puppeteer, Playwright, or any CDP client. Protected Web Access, sessions, browser actions, all handled."
---
# Browser

> Browser on Zenrows. Connect with Puppeteer, Playwright, or any CDP client. Protected Web Access, sessions, browser actions, all handled.

## Operate dynamic websites with browser sessions.

Give your agents and workflows a real browser when pages require clicks, forms, login, pagination, session state, or multi-step navigation. Puppeteer, Playwright, any CDP client. Protected Web Access included.

Formerly [Scraping Browser](https://docs.zenrows.com/browser-sessions/introduction) , now Browser.

What you'd manage without Browser

- Browser pool Spin up, cap, and tear down concurrent Chromium processes

- Reconnect logic Detect CDP drops, retry connections, resume mid-flow

- Memory ceiling Kill idle tabs, evict stalled sessions, prevent OOM crashes

- Session storage Persist and rehydrate cookies and auth tokens across restarts

- Proxy routing Thread each session through clean residential IPs per domain

- Health checks Detect hung navigations, stalled pages, and silent failures at scale

## Your code is the driver.

Drive it from the CLI with no key, or connect your own Playwright. Click. Type. Wait. Read the DOM back.

```
$ npm i -g @zenrows/cli

$ zenrows browser open \
    https://www.scrapingcourse.com/ecommerce/
✓ Session 7cca8947…

$ zenrows browser click \
    --session 7cca8947… \
    --selector a.next

$ zenrows browser get-text \
    --session 7cca8947… \
    --selector \
    .woocommerce-result-count
Showing 17–32 of 188 results

$ zenrows browser close \
    --session 7cca8947…
✓ Closed session 7cca8947….
```

```
import { chromium } from "playwright";

const browser = await chromium.connectOverCDP(
  "wss://browser.zenrows.com?apikey=ZR_•••"
);

const page = await browser.newPage();
await page.goto("https://example.com/login");
await page.fill("#email", "you@team.com");
await page.fill("#password", secret);
await page.click("button[type=submit]");
await page.waitForURL("**/dashboard");

return await page.content();
```

```
import puppeteer from "puppeteer";

const browser = await puppeteer.connect({
  browserWSEndpoint: "wss://browser.zenrows.com?apikey=ZR_•••",
});

const page = await browser.newPage();
await page.goto("https://example.com/login");
await page.type("#email", "you@team.com");
await page.type("#password", secret);
await page.click("button[type=submit]");
await page.waitForNavigation();

return await page.content();
```

No drivers. No headless quirks.

The Chromium runs on Zenrows. Your code runs anywhere. Sessions persist, the Protected Network routes, Protected Web Access stays out of the way.

A session closes after 15 minutes. It bills 5 credits a minute, plus 25,000 credits a GB.

## Build any flow from browser actions.

Navigate, fill, click, wait, screenshot, evaluate. Compose them in any order to handle any page.

- 01 goto Navigate to any URL. Anti-bot, proxies, sessions, routed transparently.

- 02 fill Type into any input. Forms, search boxes, auth credentials.

- 03 click Click any selector. Buttons, links, dropdowns, modals.

- 04 waitFor Wait for selector, URL change, or network idle. No race conditions.

- 05 screenshot Capture the page. Viewport, full-page, or a specific element.

- 06 evaluate Run JavaScript in the page context. Read the DOM, post events.

## Sessions persist.

Cookies, auth, open tabs, they stay alive across calls. Build flows that span pages without reconnecting.

- POST /auth Submit credentials The browser fills the form and posts to the auth endpoint. page.fill( "#email" , email); page.fill( "#password" , secret); page.click( "button[type=submit]" );

- SET-COOKIE The session lives. Auth response carries a cookie. The browser holds it. Every subsequent call rides it. Set-Cookie : session=abc123…; HttpOnly

- GET /dashboard Stay authenticated. Navigate anywhere on the site. The session cookie rides along, no re-auth. page.goto( "/dashboard" ); // 200 OK — no redirect to /login

- GET /api/report Pull the data. Hit the authenticated endpoint. Read the response. Done. const data = await page.evaluate( () => fetch( "/api/report" ).then(r => r.json()) );

## Already in your stack.

Any framework that speaks CDP speaks to Zenrows. No SDK lock-in. No driver install.

```
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
  browser = p.chromium.connect_over_cdp(
    "wss://browser.zenrows.com?apikey=…"
  )
```

```
import { chromium } from "playwright";

const browser = await chromium.connectOverCDP(
  "wss://browser.zenrows.com?apikey=…"
);
```

```
import puppeteer from "puppeteer";

const browser = await puppeteer.connect({
  browserWSEndpoint: "wss://browser.zenrows.com/…",
});
```

```
const ws = new WebSocket(
  "wss://browser.zenrows.com/…"
);
ws.send(JSON.stringify({
  id: 1, method: "Page.navigate", …
}));
```

## Connect the browser.

Free plan. 5,000 credits every month. No driver install. No SDK lock-in.

_Canonical HTML: https://www.zenrows.com/products/browser_

## Site Navigation

### Global Hub
- [Home](https://www.zenrows.com/index.md)
- [Pricing](https://www.zenrows.com/pricing.md)
- [Products](https://www.zenrows.com/products.md)
- [Agent Toolkit](https://www.zenrows.com/agents.md)
- [Compare](https://www.zenrows.com/compare.md)
- [Alternatives](https://www.zenrows.com/alternatives.md)
- [Blog](https://www.zenrows.com/blog)
- [Docs](https://docs.zenrows.com)
- [llms.txt](https://www.zenrows.com/llms.txt)
- [Agent skill](https://www.zenrows.com/SKILL.md)

### On This Topic
- [Products overview](https://www.zenrows.com/products.md)
- [Fetch](https://www.zenrows.com/products/fetch.md)
- [Extract](https://www.zenrows.com/products/extract.md)
- [Crawl](https://www.zenrows.com/products/crawl.md)
- [Search](https://www.zenrows.com/products/search.md)
- [Monitor](https://www.zenrows.com/products/monitor.md)
- [Batch](https://www.zenrows.com/products/batch.md)
- [API](https://www.zenrows.com/api.md)
- [SDK](https://www.zenrows.com/sdk.md)
- [MCP Server](https://www.zenrows.com/mcp.md)
- [CLI](https://www.zenrows.com/cli.md)
