Skip to main content
Browserbase supports viewport and full-page screenshots with any browser automation framework. For best performance, use CDP (Chrome DevTools Protocol) to capture screenshots — it’s significantly faster than standard approaches.

Take a screenshot

First, create a browser session and connect to it. Then take a screenshot using CDP for best performance:
import { writeFileSync } from "fs";
import { chromium } from "playwright-core";
import { Browserbase } from "@browserbasehq/sdk";

(async () => {
  console.log("Starting remote browser...");
  const bb = new Browserbase({ apiKey: process.env.BROWSERBASE_API_KEY });
  const session = await bb.sessions.create();

  const browser = await chromium.connectOverCDP(session.connectUrl);
  const defaultContext = browser.contexts()[0];
  const page = defaultContext.pages()[0];

  await page.goto("https://www.nationalgeographic.com/");

  console.log("Taking a screenshot using CDP...");

  // Create a CDP session for faster screenshots
  const client = await defaultContext.newCDPSession(page);

  // Capture a full-page screenshot using CDP
  const { data } = await client.send("Page.captureScreenshot", {
    format: "jpeg",
    quality: 80,
    captureBeyondViewport: true,
  });

  // Convert base64 to buffer and save
  const buffer = Buffer.from(data, "base64");
  writeFileSync("screenshot.jpeg", buffer);

  console.log("Shutting down...");
  await page.close();
  await browser.close();
})().catch((error) => {
  console.error(error);
});
For a viewport-only screenshot (just what’s visible on screen) with CDP, remove captureBeyondViewport or set it to false.

CDP screenshot reference

Just the CDP screenshot code:
// Create CDP session
const client = await defaultContext.newCDPSession(page);

// Capture screenshot
const { data } = await client.send("Page.captureScreenshot", {
  format: "jpeg",
  quality: 80,
  captureBeyondViewport: true,
});

// Save
const buffer = Buffer.from(data, "base64");
writeFileSync("screenshot.jpeg", buffer);

Why use CDP for screenshots?

CDP (Chrome DevTools Protocol) offers several advantages for screenshots:
  1. Performance: CDP screenshots are significantly faster than traditional methods
  2. Memory efficiency: Uses less memory as it directly communicates with the browser’s debugging protocol
  3. Quality control: Provides more control over image quality and format settings
  4. Reliability: More stable for full-page screenshots of complex web applications
For most use cases, the CDP approach shown above outperforms standard screenshot methods.