or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

browser-contexts.mdbrowser-management.mdelement-handling.mdindex.mdinput-simulation.mdlocators-selectors.mdnetwork-management.mdpage-interaction.md

browser-management.mddocs/

0

# Browser Management

1

2

Core browser lifecycle management including launching new browser instances, connecting to existing ones, and managing browser contexts for isolation.

3

4

## Capabilities

5

6

### Launch Browser

7

8

Launches a new browser instance with the specified options. For puppeteer-core, an executable path is required.

9

10

```typescript { .api }

11

/**

12

* Launch a new browser instance

13

* @param options - Browser launch configuration

14

* @returns Promise resolving to Browser instance

15

*/

16

function launch(options?: LaunchOptions): Promise<Browser>;

17

18

interface LaunchOptions {

19

/** Path to browser executable (required for puppeteer-core) */

20

executablePath?: string;

21

/** Run browser in headless mode */

22

headless?: boolean | "new";

23

/** Additional command line arguments */

24

args?: string[];

25

/** Ignore default arguments */

26

ignoreDefaultArgs?: boolean | string[];

27

/** Handle SIGINT signal */

28

handleSIGINT?: boolean;

29

/** Handle SIGTERM signal */

30

handleSIGTERM?: boolean;

31

/** Handle SIGHUP signal */

32

handleSIGHUP?: boolean;

33

/** Timeout for browser launch */

34

timeout?: number;

35

/** Dump browser output to console */

36

dumpio?: boolean;

37

/** User data directory path */

38

userDataDir?: string;

39

/** Environment variables */

40

env?: Record<string, string | undefined>;

41

/** Open browser devtools */

42

devtools?: boolean;

43

/** Use pipe transport instead of websocket */

44

pipe?: boolean;

45

/** Slow down operations by specified milliseconds */

46

slowMo?: number;

47

/** Default viewport for pages */

48

defaultViewport?: Viewport | null;

49

/** Ignore HTTPS errors */

50

ignoreHTTPSErrors?: boolean;

51

/** Target filter for connection */

52

targetFilter?: (target: Target) => boolean;

53

/** Default timeout settings */

54

timeout?: number;

55

/** Browser type (chrome or firefox) */

56

browser?: "chrome" | "firefox";

57

/** Browser channel */

58

channel?: string;

59

/** Protocol to use */

60

protocol?: "cdp" | "webDriverBiDi";

61

/** Browser arguments for debugging */

62

debuggingPort?: number;

63

}

64

```

65

66

**Usage Examples:**

67

68

```typescript

69

import puppeteer from "puppeteer-core";

70

71

// Basic launch

72

const browser = await puppeteer.launch({

73

executablePath: "/path/to/chrome",

74

headless: true

75

});

76

77

// Launch with custom arguments

78

const browser = await puppeteer.launch({

79

executablePath: "/usr/bin/google-chrome",

80

headless: false,

81

args: ["--no-sandbox", "--disable-dev-shm-usage"],

82

defaultViewport: { width: 1920, height: 1080 }

83

});

84

85

// Launch for debugging

86

const browser = await puppeteer.launch({

87

executablePath: "/path/to/chrome",

88

headless: false,

89

devtools: true,

90

slowMo: 100

91

});

92

```

93

94

### Connect to Browser

95

96

Connect to an existing browser instance via WebSocket endpoint or URL.

97

98

```typescript { .api }

99

/**

100

* Connect to existing browser instance

101

* @param options - Connection configuration

102

* @returns Promise resolving to Browser instance

103

*/

104

function connect(options: ConnectOptions): Promise<Browser>;

105

106

interface ConnectOptions {

107

/** WebSocket endpoint of the browser */

108

browserWSEndpoint?: string;

109

/** HTTP URL of the browser */

110

browserURL?: string;

111

/** Ignore HTTPS errors */

112

ignoreHTTPSErrors?: boolean;

113

/** Default viewport for new pages */

114

defaultViewport?: Viewport | null;

115

/** Slow down operations by specified milliseconds */

116

slowMo?: number;

117

/** Filter targets during connection */

118

targetFilter?: (target: Target) => boolean;

119

/** Additional headers for connection */

120

headers?: Record<string, string>;

121

/** Protocol to use */

122

protocol?: "cdp" | "webDriverBiDi";

123

}

124

```

125

126

**Usage Examples:**

127

128

```typescript

129

// Connect via WebSocket endpoint

130

const browser = await puppeteer.connect({

131

browserWSEndpoint: "ws://localhost:9222/devtools/browser"

132

});

133

134

// Connect via HTTP URL

135

const browser = await puppeteer.connect({

136

browserURL: "http://localhost:9222"

137

});

138

139

// Connect with custom headers

140

const browser = await puppeteer.connect({

141

browserWSEndpoint: "ws://remote:9222/devtools/browser",

142

headers: { "Authorization": "Bearer token" }

143

});

144

```

145

146

### Default Arguments

147

148

Get default command line arguments used when launching the browser.

149

150

```typescript { .api }

151

/**

152

* Get default browser launch arguments

153

* @param options - Launch options to consider

154

* @returns Array of default arguments

155

*/

156

function defaultArgs(options?: LaunchOptions): string[];

157

```

158

159

**Usage Examples:**

160

161

```typescript

162

// Get default arguments

163

const args = puppeteer.defaultArgs();

164

console.log(args); // ["--disable-background-networking", "--enable-features=...", ...]

165

166

// Get arguments for headless mode

167

const headlessArgs = puppeteer.defaultArgs({ headless: true });

168

169

// Get arguments excluding specific ones

170

const customArgs = puppeteer.defaultArgs({

171

ignoreDefaultArgs: ["--disable-extensions"]

172

});

173

```

174

175

### Executable Path

176

177

Get the path to the bundled browser executable (returns empty string for puppeteer-core).

178

179

```typescript { .api }

180

/**

181

* Get path to browser executable

182

* @returns Path to executable or empty string for puppeteer-core

183

*/

184

function executablePath(): string;

185

```

186

187

**Usage Examples:**

188

189

```typescript

190

// Get executable path (empty for puppeteer-core)

191

const path = puppeteer.executablePath();

192

console.log(path); // "" - must provide executablePath in launch options

193

```

194

195

### Browser Interface

196

197

Main browser instance providing access to pages, contexts, and browser-level operations.

198

199

```typescript { .api }

200

interface Browser extends EventEmitter {

201

/** Get the browser process (Node.js only) */

202

process(): ChildProcess | null;

203

/** Create new isolated browser context */

204

createBrowserContext(options?: BrowserContextOptions): Promise<BrowserContext>;

205

/** Get all browser contexts */

206

browserContexts(): BrowserContext[];

207

/** Get default browser context */

208

defaultBrowserContext(): BrowserContext;

209

/** Get WebSocket endpoint */

210

wsEndpoint(): string;

211

/** Create new page in default context */

212

newPage(): Promise<Page>;

213

/** Get all targets (pages, workers, etc.) */

214

targets(): Target[];

215

/** Get browser version */

216

version(): Promise<string>;

217

/** Get browser user agent */

218

userAgent(): Promise<string>;

219

/** Close browser and all pages */

220

close(): Promise<void>;

221

/** Disconnect from browser without closing */

222

disconnect(): Promise<void>;

223

/** Check if browser is connected */

224

connected: boolean;

225

/** Get protocol type being used */

226

protocol: "cdp" | "webDriverBiDi";

227

/** Install browser extension (Chrome only) */

228

installExtension(path: string): Promise<string>;

229

/** Uninstall browser extension (Chrome only) */

230

uninstallExtension(id: string): Promise<void>;

231

}

232

233

interface BrowserContextOptions {

234

/** Proxy server settings */

235

proxyServer?: string;

236

/** Proxy bypass rules */

237

proxyBypassList?: string[];

238

/** Proxy username */

239

proxyUsername?: string;

240

/** Proxy password */

241

proxyPassword?: string;

242

}

243

```

244

245

**Usage Examples:**

246

247

```typescript

248

const browser = await puppeteer.launch({ executablePath: "/path/to/chrome" });

249

250

// Create new page

251

const page = await browser.newPage();

252

253

// Create isolated context

254

const context = await browser.createBrowserContext();

255

const contextPage = await context.newPage();

256

257

// Get browser info

258

const version = await browser.version();

259

const userAgent = await browser.userAgent();

260

const wsEndpoint = browser.wsEndpoint();

261

262

// Check connection

263

if (browser.connected) {

264

console.log("Browser is connected");

265

}

266

267

// Handle browser events

268

browser.on("disconnected", () => {

269

console.log("Browser disconnected");

270

});

271

272

browser.on("targetcreated", (target) => {

273

console.log("New target created:", target.type());

274

});

275

276

// Close browser

277

await browser.close();

278

```

279

280

### Browser Events

281

282

The Browser class emits various events during its lifecycle:

283

284

```typescript { .api }

285

interface BrowserEvents {

286

/** Emitted when browser disconnects */

287

"disconnected": () => void;

288

/** Emitted when new target is created */

289

"targetcreated": (target: Target) => void;

290

/** Emitted when target is destroyed */

291

"targetdestroyed": (target: Target) => void;

292

/** Emitted when target URL changes */

293

"targetchanged": (target: Target) => void;

294

}

295

```

296

297

## Error Handling

298

299

Browser management operations can throw several types of errors:

300

301

```typescript { .api }

302

class TimeoutError extends Error {

303

constructor(message: string);

304

}

305

306

class ProtocolError extends Error {

307

constructor(message: string);

308

originalMessage: string;

309

}

310

```

311

312

**Common Error Scenarios:**

313

314

```typescript

315

try {

316

const browser = await puppeteer.launch({

317

executablePath: "/invalid/path",

318

timeout: 30000

319

});

320

} catch (error) {

321

if (error instanceof TimeoutError) {

322

console.log("Browser launch timed out");

323

} else if (error.message.includes("Failed to launch")) {

324

console.log("Invalid executable path or browser failed to start");

325

}

326

}

327

```

328

329

### Device Emulation

330

331

Built-in device emulation capabilities with predefined configurations for common mobile devices and tablets.

332

333

```typescript { .api }

334

interface Device {

335

userAgent: string;

336

viewport: Viewport;

337

}

338

339

const KnownDevices: Record<string, Device>;

340

341

// Example known devices (partial list):

342

// - iPhone 15 Pro, iPhone 15 Pro Max

343

// - iPhone 14, iPhone 14 Plus, iPhone 14 Pro, iPhone 14 Pro Max

344

// - iPhone 13 Pro, iPhone 13 Pro Max, iPhone 13 Mini

345

// - iPhone 12, iPhone 12 Pro, iPhone 12 Pro Max, iPhone 12 Mini

346

// - iPhone 11, iPhone 11 Pro, iPhone 11 Pro Max

347

// - iPhone X, iPhone XR, iPhone 8, iPhone 8 Plus, iPhone 7, iPhone 6

348

// - iPad Pro, iPad Pro 11, iPad, iPad Mini

349

// - Galaxy S9+, Galaxy S8, Galaxy S5, Galaxy Note 3, Galaxy Tab S4

350

// - Pixel 5, Pixel 4, Pixel 3, Pixel 2, Pixel 2 XL

351

// - Nexus 7, Nexus 6P, Nexus 5X, Nexus 5, Nexus 4, Nexus 10

352

// - Moto G4, BlackBerry Z30, Microsoft Lumia 950

353

// - And many more...

354

```

355

356

**Usage Examples:**

357

358

```typescript

359

import puppeteer, { KnownDevices } from "puppeteer-core";

360

361

const browser = await puppeteer.launch({ executablePath: "/path/to/chrome" });

362

const page = await browser.newPage();

363

364

// Emulate iPhone 15 Pro

365

const iPhone15Pro = KnownDevices['iPhone 15 Pro'];

366

await page.emulate(iPhone15Pro);

367

368

// Emulate iPad Pro

369

const iPadPro = KnownDevices['iPad Pro'];

370

await page.emulate(iPadPro);

371

372

// Emulate Galaxy S9+

373

const galaxyS9Plus = KnownDevices['Galaxy S9+'];

374

await page.emulate(galaxyS9Plus);

375

376

// Custom device emulation

377

const customDevice = {

378

userAgent: 'Mozilla/5.0 (Linux; Android 9; Custom Device) AppleWebKit/537.36',

379

viewport: {

380

width: 414,

381

height: 896,

382

deviceScaleFactor: 2,

383

isMobile: true,

384

hasTouch: true,

385

isLandscape: false

386

}

387

};

388

await page.emulate(customDevice);

389

390

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

391

await browser.close();

392

```