CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-puppeteer

A high-level API to control headless Chrome over the DevTools Protocol

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

browser-management.mddocs/

Browser Management

Core browser lifecycle operations including launching browsers, creating contexts, and managing browser-level settings.

Capabilities

Launch Browser

Launch a new browser instance with specified options.

/**
 * Launch a new browser instance
 * @param options - Configuration options for browser launch
 * @returns Promise resolving to Browser instance
 */
function launch(options?: LaunchOptions): Promise<Browser>;

interface LaunchOptions {
  /** Run browser in headless mode. Can be true, false, "new" (new headless), or "shell" */
  headless?: boolean | "new" | "shell";
  /** Path to browser executable. If not specified, uses bundled Chromium */
  executablePath?: string;
  /** Additional command line arguments to pass to browser */
  args?: string[];
  /** Whether to ignore default arguments or specify which ones to ignore */
  ignoreDefaultArgs?: boolean | string[];
  /** Whether to handle SIGINT signal */
  handleSIGINT?: boolean;
  /** Whether to handle SIGTERM signal */
  handleSIGTERM?: boolean;
  /** Whether to handle SIGHUP signal */
  handleSIGHUP?: boolean;
  /** Maximum time to wait for browser to start (milliseconds) */
  timeout?: number;
  /** Whether to pipe browser stdout/stderr to process stdout/stderr */
  dumpio?: boolean;
  /** Environment variables to set for browser process */
  env?: Record<string, string | undefined>;
  /** Whether to auto-open DevTools panel for each tab */
  devtools?: boolean;
  /** Delay between actions in milliseconds */
  slowMo?: number;
  /** Default viewport for each page. Set to null to disable default viewport */
  defaultViewport?: Viewport | null;
  /** Whether to ignore HTTPS errors */
  ignoreHTTPSErrors?: boolean;
  /** Browser to launch ("chrome" or "firefox") */
  browser?: "chrome" | "firefox";
  /** Release channel to use (Chrome only) */
  channel?: "chrome" | "chrome-beta" | "chrome-canary" | "chrome-dev";
  /** Whether to wait for initial page to be created */
  waitForInitialPage?: boolean;
  /** Port to use for debugging. If 0, a random port is chosen */
  debuggingPort?: number;
}

Usage Examples:

import puppeteer from "puppeteer";

// Basic launch
const browser = await puppeteer.launch();

// Launch with options
const browser = await puppeteer.launch({
  headless: false,    // Run with GUI
  slowMo: 250,       // Slow down actions
  devtools: true,    // Open DevTools
  args: ["--no-sandbox", "--disable-setuid-sandbox"]
});

// Launch Firefox
const browser = await puppeteer.launch({
  browser: "firefox",
  headless: true
});

Connect to Browser

Connect to an existing browser instance via WebSocket.

/**
 * Connect to an existing browser instance
 * @param options - Connection options
 * @returns Promise resolving to Browser instance
 */
function connect(options: ConnectOptions): Promise<Browser>;

interface ConnectOptions {
  /** WebSocket endpoint URL to connect to */
  browserWSEndpoint?: string;
  /** Browser HTTP endpoint URL */
  browserURL?: string;
  /** Whether to ignore HTTPS errors */
  ignoreHTTPSErrors?: boolean;
  /** Default viewport for new pages */
  defaultViewport?: Viewport | null;
  /** Delay between actions in milliseconds */
  slowMo?: number;
  /** Function to filter which targets to track */
  targetFilter?: (target: Target) => boolean;
  /** Transport mechanism to use */
  transport?: ConnectionTransport;
  /** Protocol to use for communication */
  protocol?: "cdp" | "webDriverBiDi";
}

Usage Examples:

// Connect via WebSocket endpoint
const browser = await puppeteer.connect({
  browserWSEndpoint: "ws://localhost:9222/devtools/browser"
});

// Connect via browser URL
const browser = await puppeteer.connect({
  browserURL: "http://localhost:9222"
});

Browser Class

Represents a browser instance that can manage multiple contexts and pages.

/**
 * Browser instance managing contexts, pages, and targets
 */
class Browser {
  /** Get browser version information */
  version(): Promise<string>;
  
  /** Get browser user agent string */
  userAgent(): Promise<string>;
  
  /** Get WebSocket endpoint URL */
  wsEndpoint(): string;
  
  /** Create new page in default browser context */
  newPage(): Promise<Page>;
  
  /** Get all open pages across all contexts */
  pages(): Promise<Page[]>;
  
  /** Get all targets (pages, workers, etc.) */
  targets(): Target[];
  
  /** Get browser target */
  target(): Target;
  
  /** Wait for target matching predicate */
  waitForTarget(
    predicate: (target: Target) => boolean,
    options?: WaitForTargetOptions
  ): Promise<Target>;
  
  /** Create new browser context (incognito-like) */
  createBrowserContext(options?: BrowserContextOptions): Promise<BrowserContext>;
  
  /** Get all browser contexts */
  browserContexts(): BrowserContext[];
  
  /** Get default browser context */
  defaultBrowserContext(): BrowserContext;
  
  /** Get browser child process (null if connected remotely) */
  process(): ChildProcess | null;
  
  /** Check if browser is connected */
  isConnected(): boolean;
  
  /** Close browser and all pages */
  close(): Promise<void>;
  
  /** Disconnect from browser (without closing) */
  disconnect(): Promise<void>;
  
  /** Get all cookies from all contexts */
  cookies(): Promise<Cookie[]>;
  
  /** Set cookies for all contexts */
  setCookie(...cookies: CookieData[]): Promise<void>;
  
  /** Delete cookies from all contexts */
  deleteCookie(...cookies: Cookie[]): Promise<void>;
}

interface WaitForTargetOptions {
  /** Timeout in milliseconds */
  timeout?: number;
}

interface BrowserContextOptions {
  /** Proxy server settings */
  proxyServer?: string;
  /** Proxy bypass list */
  proxyBypassList?: string[];
  /** Proxy username */
  proxyUsername?: string;
  /** Proxy password */
  proxyPassword?: string;
}

interface CookieData {
  /** Cookie name */
  name: string;
  /** Cookie value */
  value: string;
  /** Cookie domain */
  domain?: string;
  /** Cookie path */
  path?: string;
  /** Expiration timestamp */
  expires?: number;
  /** HTTP only flag */
  httpOnly?: boolean;
  /** Secure flag */
  secure?: boolean;
  /** SameSite policy */
  sameSite?: "Strict" | "Lax" | "None";
}

Usage Examples:

const browser = await puppeteer.launch();

// Get browser info
const version = await browser.version();
const userAgent = await browser.userAgent();

// Create pages
const page1 = await browser.newPage();
const page2 = await browser.newPage();

// Get all pages
const pages = await browser.pages();
console.log(`Open pages: ${pages.length}`);

// Wait for new page
const newPage = await browser.waitForTarget(
  target => target.type() === "page"
).then(target => target.page());

// Create isolated context
const context = await browser.createBrowserContext();
const contextPage = await context.newPage();

await browser.close();

BrowserContext Class

Isolated browser environment (incognito-like) for managing related pages with separate cookies, storage, and permissions.

/**
 * Isolated browser context with separate state
 */
class BrowserContext {
  /** Get parent browser */
  browser(): Browser;
  
  /** Create new page in this context */
  newPage(): Promise<Page>;
  
  /** Get all pages in this context */
  pages(): Promise<Page[]>;
  
  /** Get all targets in this context */
  targets(): Target[];
  
  /** Wait for target in this context */
  waitForTarget(
    predicate: (target: Target) => boolean,
    options?: WaitForTargetOptions
  ): Promise<Target>;
  
  /** Close context and all its pages */
  close(): Promise<void>;
  
  /** Override permissions for origins */
  overridePermissions(
    origin: string,
    permissions: Permission[]
  ): Promise<void>;
  
  /** Clear permission overrides */
  clearPermissionOverrides(): Promise<void>;
  
  /** Get cookies for this context */
  cookies(): Promise<Cookie[]>;
  
  /** Set cookies for this context */
  setCookie(...cookies: CookieData[]): Promise<void>;
  
  /** Delete cookies from this context */
  deleteCookie(...cookies: Cookie[]): Promise<void>;
}

type Permission =
  | "geolocation"
  | "midi"
  | "notifications"
  | "camera"
  | "microphone"
  | "background-sync"
  | "ambient-light-sensor"
  | "accelerometer"
  | "gyroscope"
  | "magnetometer"
  | "accessibility-events"
  | "clipboard-read"
  | "clipboard-write"
  | "payment-handler"
  | "idle-detection"
  | "midi-sysex";

Usage Examples:

const browser = await puppeteer.launch();

// Create isolated context
const context = await browser.createBrowserContext();

// Set permissions
await context.overridePermissions("https://example.com", [
  "geolocation",
  "notifications"
]);

// Create page in context
const page = await context.newPage();
await page.goto("https://example.com");

// Set context-specific cookies
await context.setCookie({
  name: "session",
  value: "abc123",
  domain: "example.com"
});

// Clean up
await context.close();
await browser.close();

Utility Functions

Additional browser management utilities.

/**
 * Get default launch arguments for the browser
 * @param options - Launch options to determine arguments for
 * @returns Array of command line arguments
 */
function defaultArgs(options?: LaunchOptions): string[];

/**
 * Get path to browser executable
 * @returns Path to browser executable
 */
function executablePath(): string;

/**
 * Remove old browser binaries from cache
 * @returns Promise that resolves when cleanup is complete
 */
function trimCache(): Promise<void>;

Usage Examples:

// Get default arguments
const args = puppeteer.defaultArgs({
  headless: false,
  devtools: true
});
console.log("Default args:", args);

// Get executable path
const execPath = puppeteer.executablePath();
console.log("Browser location:", execPath);

// Clean up old binaries
await puppeteer.trimCache();

Install with Tessl CLI

npx tessl i tessl/npm-puppeteer

docs

browser-management.md

device-emulation.md

element-handling.md

index.md

input-interaction.md

locators-waiting.md

media-generation.md

network-control.md

page-interaction.md

performance-debugging.md

tile.json