# Browser Sessions

> Browser Sessions 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 Sessions.

What you'd manage without Browser Sessions

- 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.

Connect to the WebSocket. The browser does what you ask, in the order you ask. Click. Type. Wait. Read the DOM back.

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.

## 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.

_Canonical HTML: https://www.zenrows.com/products/browser-sessions_

## 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)
