17 KiB
Chrome DevTools Protocol (CDP) Domains Reference
Complete reference of CDP domains and their capabilities for browser automation and debugging.
Overview
CDP is organized into 47 domains, each providing specific browser capabilities. Domains are grouped by functionality:
- Core - Fundamental browser control
- DOM & Styling - Page structure and styling
- Network & Fetch - HTTP traffic management
- Page & Navigation - Page lifecycle control
- Storage & Data - Browser storage APIs
- Performance & Profiling - Metrics and analysis
- Emulation & Simulation - Device and network emulation
- Worker & Service - Background tasks
- Developer Tools - Debugging support
Core Domains
Runtime
Purpose: Execute JavaScript, manage objects, handle promises
Key Commands:
Runtime.evaluate(expression)- Execute JavaScriptRuntime.callFunctionOn(functionDeclaration, objectId)- Call function on objectRuntime.getProperties(objectId)- Get object propertiesRuntime.awaitPromise(promiseObjectId)- Wait for promise resolution
Key Events:
Runtime.consoleAPICalled- Console message loggedRuntime.exceptionThrown- Uncaught exception
Use Cases:
- Execute custom JavaScript
- Access page data
- Monitor console output
- Handle exceptions
Debugger
Purpose: JavaScript debugging, breakpoints, stack traces
Key Commands:
Debugger.enable()- Enable debuggerDebugger.setBreakpoint(location)- Set breakpointDebugger.pause()- Pause executionDebugger.resume()- Resume executionDebugger.stepOver/stepInto/stepOut()- Step through code
Key Events:
Debugger.paused- Execution pausedDebugger.resumed- Execution resumedDebugger.scriptParsed- Script loaded
Use Cases:
- Debug JavaScript errors
- Inspect call stacks
- Set conditional breakpoints
- Source map support
Console (Deprecated - Use Runtime/Log)
Purpose: Legacy console message access
Note: Use Runtime.consoleAPICalled event instead for new implementations.
DOM & Styling Domains
DOM
Purpose: Access and manipulate DOM tree
Key Commands:
DOM.getDocument()- Get root document nodeDOM.querySelector(nodeId, selector)- Query selectorDOM.querySelectorAll(nodeId, selector)- Query allDOM.getAttributes(nodeId)- Get element attributesDOM.setOuterHTML(nodeId, outerHTML)- Replace elementDOM.getBoxModel(nodeId)- Get element layout boxDOM.focus(nodeId)- Focus element
Key Events:
DOM.documentUpdated- Document changedDOM.setChildNodes- Child nodes updated
Use Cases:
- Navigate DOM tree
- Query elements
- Modify DOM structure
- Get element positions
CSS
Purpose: Inspect and modify CSS styles
Key Commands:
CSS.enable()- Enable CSS domainCSS.getComputedStyleForNode(nodeId)- Get computed stylesCSS.getInlineStylesForNode(nodeId)- Get inline stylesCSS.getMatchedStylesForNode(nodeId)- Get matched CSS rulesCSS.setStyleTexts(edits)- Modify styles
Key Events:
CSS.styleSheetAdded- Stylesheet addedCSS.styleSheetChanged- Stylesheet modified
Use Cases:
- Inspect element styles
- Debug CSS issues
- Modify styles dynamically
- Extract stylesheet data
Accessibility
Purpose: Access accessibility tree
Key Commands:
Accessibility.enable()- Enable accessibilityAccessibility.getFullAXTree()- Get complete AX treeAccessibility.getPartialAXTree(nodeId)- Get node subtreeAccessibility.queryAXTree(nodeId, role, name)- Query AX tree
Use Cases:
- Accessibility testing
- Screen reader simulation
- ARIA attribute inspection
- AX tree analysis
Network & Fetch Domains
Network
Purpose: Monitor and control HTTP traffic
Key Commands:
Network.enable()- Enable network trackingNetwork.setCacheDisabled(cacheDisabled)- Disable cacheNetwork.setExtraHTTPHeaders(headers)- Add custom headersNetwork.getCookies(urls)- Get cookiesNetwork.setCookie(name, value, domain)- Set cookieNetwork.getResponseBody(requestId)- Get response bodyNetwork.emulateNetworkConditions(offline, latency, downloadThroughput, uploadThroughput)- Throttle network
Key Events:
Network.requestWillBeSent- Request startingNetwork.responseReceived- Response receivedNetwork.loadingFinished- Request completedNetwork.loadingFailed- Request failed
Use Cases:
- Monitor API calls
- Intercept requests
- Analyze response data
- Simulate slow networks
- Manage cookies
Fetch
Purpose: Intercept and modify network requests
Key Commands:
Fetch.enable(patterns)- Enable request interceptionFetch.continueRequest(requestId, url, method, headers)- Continue/modify requestFetch.fulfillRequest(requestId, responseCode, headers, body)- Mock responseFetch.failRequest(requestId, errorReason)- Fail request
Key Events:
Fetch.requestPaused- Request intercepted
Use Cases:
- Mock API responses
- Block requests
- Modify request/response
- Test error scenarios
Page & Navigation Domains
Page
Purpose: Control page lifecycle and navigation
Key Commands:
Page.enable()- Enable page domainPage.navigate(url)- Navigate to URLPage.reload(ignoreCache)- Reload pagePage.goBack()/goForward()- Navigate historyPage.captureScreenshot(format, quality)- Take screenshotPage.printToPDF(landscape, displayHeaderFooter)- Generate PDFPage.getLayoutMetrics()- Get page dimensionsPage.createIsolatedWorld(frameId)- Create isolated contextPage.handleJavaScriptDialog(accept, promptText)- Handle alerts/confirms
Key Events:
Page.loadEventFired- Page loadedPage.domContentEventFired- DOM readyPage.frameNavigated- Frame navigatedPage.javascriptDialogOpening- Alert/confirm shown
Use Cases:
- Navigate pages
- Capture screenshots
- Generate PDFs
- Handle popups
- Monitor page lifecycle
Target
Purpose: Manage browser targets (tabs, workers, frames)
Key Commands:
Target.getTargets()- List all targetsTarget.createTarget(url)- Open new tabTarget.closeTarget(targetId)- Close tabTarget.attachToTarget(targetId)- Attach debuggerTarget.detachFromTarget(sessionId)- Detach debuggerTarget.setDiscoverTargets(discover)- Auto-discover targets
Key Events:
Target.targetCreated- New target createdTarget.targetDestroyed- Target closedTarget.targetInfoChanged- Target updated
Use Cases:
- Multi-tab automation
- Service worker debugging
- Frame inspection
- Extension debugging
Input
Purpose: Simulate user input
Key Commands:
Input.dispatchKeyEvent(type, key, code)- Keyboard inputInput.dispatchMouseEvent(type, x, y, button)- Mouse inputInput.dispatchTouchEvent(type, touchPoints)- Touch inputInput.synthesizePinchGesture(x, y, scaleFactor)- Pinch gestureInput.synthesizeScrollGesture(x, y, xDistance, yDistance)- Scroll
Use Cases:
- Simulate clicks
- Type text
- Drag and drop
- Touch gestures
- Scroll pages
Storage & Data Domains
Storage
Purpose: Manage browser storage
Key Commands:
Storage.getCookies(browserContextId)- Get cookiesStorage.setCookies(cookies)- Set cookiesStorage.clearCookies(browserContextId)- Clear cookiesStorage.clearDataForOrigin(origin, storageTypes)- Clear storageStorage.getUsageAndQuota(origin)- Get storage usage
Storage Types:
- appcache, cookies, file_systems, indexeddb, local_storage, shader_cache, websql, service_workers, cache_storage
Use Cases:
- Cookie management
- Clear browser data
- Inspect storage usage
- Test quota limits
DOMStorage
Purpose: Access localStorage/sessionStorage
Key Commands:
DOMStorage.enable()- Enable storage trackingDOMStorage.getDOMStorageItems(storageId)- Get itemsDOMStorage.setDOMStorageItem(storageId, key, value)- Set itemDOMStorage.removeDOMStorageItem(storageId, key)- Remove item
Key Events:
DOMStorage.domStorageItemsCleared- Storage clearedDOMStorage.domStorageItemAdded/Updated/Removed- Item changed
IndexedDB
Purpose: Query IndexedDB databases
Key Commands:
IndexedDB.requestDatabaseNames(securityOrigin)- List databasesIndexedDB.requestDatabase(securityOrigin, databaseName)- Get DB structureIndexedDB.requestData(securityOrigin, databaseName, objectStoreName)- Query data
Use Cases:
- Inspect IndexedDB data
- Debug database issues
- Extract stored data
CacheStorage
Purpose: Manage Cache API
Key Commands:
CacheStorage.requestCacheNames(securityOrigin)- List cachesCacheStorage.requestCachedResponses(cacheId, securityOrigin)- List cached responsesCacheStorage.deleteCache(cacheId)- Delete cache
Use Cases:
- Service worker cache inspection
- Offline functionality testing
Performance & Profiling Domains
Performance
Purpose: Collect performance metrics
Key Commands:
Performance.enable()- Enable performance trackingPerformance.disable()- Disable trackingPerformance.getMetrics()- Get current metrics
Metrics:
- Timestamp, Documents, Frames, JSEventListeners, Nodes, LayoutCount, RecalcStyleCount, LayoutDuration, RecalcStyleDuration, ScriptDuration, TaskDuration, JSHeapUsedSize, JSHeapTotalSize
Use Cases:
- Monitor page metrics
- Track memory usage
- Measure render times
PerformanceTimeline
Purpose: Access Performance Timeline API
Key Commands:
PerformanceTimeline.enable(eventTypes)- Subscribe to events
Event Types:
- mark, measure, navigation, resource, longtask, paint, layout-shift
Key Events:
PerformanceTimeline.timelineEventAdded- New performance entry
Tracing
Purpose: Record Chrome trace
Key Commands:
Tracing.start(categories, options)- Start recordingTracing.end()- Stop recordingTracing.requestMemoryDump()- Capture memory snapshot
Trace Categories:
- blink, cc, devtools, gpu, loading, navigation, rendering, v8, disabled-by-default-*
Key Events:
Tracing.dataCollected- Trace chunk receivedTracing.tracingComplete- Recording finished
Use Cases:
- Deep performance analysis
- Frame rendering profiling
- CPU flame graphs
- Memory profiling
Profiler
Purpose: CPU profiling
Key Commands:
Profiler.enable()- Enable profilerProfiler.start()- Start CPU profilingProfiler.stop()- Stop and get profile
Use Cases:
- Find CPU bottlenecks
- Optimize JavaScript
- Generate flame graphs
HeapProfiler (via Memory domain)
Purpose: Memory profiling
Key Commands:
Memory.getDOMCounters()- Get DOM object countsMemory.prepareForLeakDetection()- Prepare leak detectionMemory.forciblyPurgeJavaScriptMemory()- Force GCMemory.setPressureNotificationsSuppressed(suppressed)- Control memory warningsMemory.simulatePressureNotification(level)- Simulate memory pressure
Use Cases:
- Detect memory leaks
- Analyze heap snapshots
- Monitor object counts
Emulation & Simulation Domains
Emulation
Purpose: Emulate device conditions
Key Commands:
Emulation.setDeviceMetricsOverride(width, height, deviceScaleFactor, mobile)- Emulate deviceEmulation.setGeolocationOverride(latitude, longitude, accuracy)- Fake locationEmulation.setEmulatedMedia(media, features)- Emulate media typeEmulation.setTimezoneOverride(timezoneId)- Override timezoneEmulation.setLocaleOverride(locale)- Override languageEmulation.setUserAgentOverride(userAgent)- Change user agent
Use Cases:
- Mobile device testing
- Geolocation testing
- Print media emulation
- Timezone/locale testing
DeviceOrientation
Purpose: Simulate device orientation
Key Commands:
DeviceOrientation.setDeviceOrientationOverride(alpha, beta, gamma)- Set orientation
Use Cases:
- Test accelerometer features
- Orientation-dependent layouts
Worker & Service Domains
ServiceWorker
Purpose: Manage service workers
Key Commands:
ServiceWorker.enable()- Enable trackingServiceWorker.unregister(scopeURL)- Unregister workerServiceWorker.startWorker(scopeURL)- Start workerServiceWorker.stopWorker(versionId)- Stop workerServiceWorker.inspectWorker(versionId)- Debug worker
Key Events:
ServiceWorker.workerRegistrationUpdated- Registration changedServiceWorker.workerVersionUpdated- Version updated
WebAuthn
Purpose: Simulate WebAuthn/FIDO2
Key Commands:
WebAuthn.enable()- Enable virtual authenticatorsWebAuthn.addVirtualAuthenticator(options)- Add virtual deviceWebAuthn.removeVirtualAuthenticator(authenticatorId)- Remove deviceWebAuthn.addCredential(authenticatorId, credential)- Add credential
Use Cases:
- Test WebAuthn flows
- Simulate biometric auth
- Test security keys
Developer Tools Support
Inspector
Purpose: Protocol-level debugging
Key Events:
Inspector.detached- Debugger disconnectedInspector.targetCrashed- Target crashed
Log
Purpose: Collect browser logs
Key Commands:
Log.enable()- Enable log collectionLog.clear()- Clear logs
Key Events:
Log.entryAdded- New log entry
Use Cases:
- Collect console logs
- Monitor violations
- Track deprecations
DOMDebugger
Purpose: DOM-level debugging
Key Commands:
DOMDebugger.setDOMBreakpoint(nodeId, type)- Break on DOM changesDOMDebugger.setEventListenerBreakpoint(eventName)- Break on eventDOMDebugger.setXHRBreakpoint(url)- Break on XHR
Breakpoint Types:
- subtree-modified, attribute-modified, node-removed
DOMSnapshot
Purpose: Capture complete DOM snapshot
Key Commands:
DOMSnapshot.captureSnapshot(computedStyles)- Capture full DOM
Use Cases:
- Export page structure
- Offline analysis
- DOM diffing
Audits (Lighthouse Integration)
Purpose: Run automated audits
Key Commands:
Audits.enable()- Enable auditsAudits.getEncodingIssues()- Check encoding issues
LayerTree
Purpose: Inspect rendering layers
Key Commands:
LayerTree.enable()- Enable layer trackingLayerTree.compositingReasons(layerId)- Get why layer created
Key Events:
LayerTree.layerTreeDidChange- Layers changed
Use Cases:
- Debug rendering performance
- Identify layer creation
- Optimize compositing
Other Domains
Browser
Purpose: Browser-level control
Key Commands:
Browser.getVersion()- Get browser infoBrowser.getBrowserCommandLine()- Get launch argsBrowser.setPermission(permission, setting, origin)- Set permissionsBrowser.grantPermissions(permissions, origin)- Grant permissions
Permissions:
- geolocation, midi, notifications, push, camera, microphone, background-sync, sensors, accessibility-events, clipboard-read, clipboard-write, payment-handler
IO
Purpose: File I/O operations
Key Commands:
IO.read(handle, offset, size)- Read streamIO.close(handle)- Close stream
Use Cases:
- Read large response bodies
- Process binary data
Media
Purpose: Inspect media players
Key Commands:
Media.enable()- Track media players
Key Events:
Media.playerPropertiesChanged- Player state changedMedia.playerEventsAdded- Player events
BackgroundService
Purpose: Track background services
Key Commands:
BackgroundService.startObserving(service)- Track service
Services:
- backgroundFetch, backgroundSync, pushMessaging, notifications, paymentHandler, periodicBackgroundSync
Domain Dependencies
Some domains depend on others and must be enabled in order:
Runtime (no dependencies)
↓
DOM (depends on Runtime)
↓
CSS (depends on DOM)
Network (no dependencies)
Page (depends on Runtime)
↓
Target (depends on Page)
Debugger (depends on Runtime)
Quick Command Reference
Most Common Commands
// Navigation
Page.navigate(url)
Page.reload()
// JavaScript Execution
Runtime.evaluate(expression)
// DOM Access
DOM.getDocument()
DOM.querySelector(nodeId, selector)
// Screenshots
Page.captureScreenshot(format, quality)
// Network Monitoring
Network.enable()
// Listen for Network.requestWillBeSent events
// Console Messages
// Listen for Runtime.consoleAPICalled events
// Cookies
Network.getCookies(urls)
Network.setCookie(...)
// Device Emulation
Emulation.setDeviceMetricsOverride(width, height, ...)
// Performance
Performance.getMetrics()
Tracing.start(categories)
Tracing.end()
Best Practices
- Enable domains before use: Always call
.enable()for stateful domains - Handle events: Subscribe to events for real-time updates
- Clean up: Disable domains when done to reduce overhead
- Use sessions: Attach to specific targets for isolated debugging
- Handle errors: Implement proper error handling for command failures
- Version awareness: Check browser version for experimental API support
Additional Resources
- Protocol Viewer - Interactive domain browser
- Protocol JSON - Machine-readable specification
- Getting Started with CDP
- devtools-protocol NPM - TypeScript definitions