What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
ConnectionTransport.send() sends a string over Puppeteer’s browser-connection transport; it is not the usual way to issue a Chrome DevTools Protocol (CDP) command. For CDP commands, call CDPSession.send(method, params). Supply a custom transport only when you need to adapt how Puppeteer connects to the browser, using the transport option in puppeteer.connect().
Choose the right send method
| What you need to do | Use | What you pass |
|---|---|---|
| Issue a CDP command, such as evaluating a JavaScript expression | CDPSession.send() |
A protocol method name and its parameters |
| Provide or adapt the low-level connection used by Puppeteer | ConnectionTransport.send(), as part of a custom transport |
A string message; Puppeteer supplies and consumes messages through the adapter interface |
For ordinary protocol work, use CDPSession.send(). Its documented signature is send(method, params?, options?), and it returns a promise for the command’s mapped result. The transport interface is a lower-level connection boundary, not a typed CDP command helper. See the CDPSession.send() reference and the ConnectionTransport reference.
Connect to a browser and send a CDP command
The following Node.js example connects to an existing browser, opens a page, creates a CDP session, and evaluates an expression. It assumes puppeteer is installed and BROWSER_WS_ENDPOINT contains a reachable browser WebSocket endpoint.
const puppeteer = require('puppeteer');
async function main() {
const browserWSEndpoint = process.env.BROWSER_WS_ENDPOINT;
if (!browserWSEndpoint) {
throw new Error('Set BROWSER_WS_ENDPOINT to the browser WebSocket endpoint');
}
const browser = await puppeteer.connect({ browserWSEndpoint });
try {
const page = await browser.newPage();
const session = await page.createCDPSession();
const result = await session.send('Runtime.evaluate', {
expression: '1 + 1',
});
console.log(result);
await session.detach();
} finally {
await browser.disconnect();
}
}
main().catch(error => {
console.error(error);
process.exitCode = 1;
});
Check the command name and parameter names against the protocol version supported by the browser you connect to. The documented connect() function resolves to a Browser. The browser WebSocket endpoint can be obtained with browser.wsEndpoint() or read as webSocketDebuggerUrl from http://HOST:PORT/json/version; see the Browser.wsEndpoint() reference.
Free tools Windows power users keep installed
One-click scans. No signup required.
#1 Best Overall
When to implement ConnectionTransport
Use a custom adapter when Puppeteer’s connection mechanism needs to be supplied or adapted. The public interface documents the responsibilities below, but does not provide a complete transport implementation:
send(message: string)sends the transport message.onmessagereceives a string message from the underlying connection.onclosesignals that the underlying connection has closed.close()closes the transport.
Pass your adapter instance as transport to puppeteer.connect(). The official ConnectOptions reference lists this option. Because the API reference defines the boundary rather than a full adapter recipe, the underlying connection’s message ordering, buffering, backpressure, reconnection, and error handling must be designed and verified for your transport and Puppeteer version. Do not assume Puppeteer’s interface itself supplies those behaviors.
Rank #2
Find and verify a browser WebSocket endpoint
- Start or provision a browser that exposes a debugging connection, and ensure the client can reach it.
- Obtain the endpoint from the browser’s
wsEndpoint()method, or requesthttp://HOST:PORT/json/versionand read thewebSocketDebuggerUrlvalue. - Pass the full WebSocket URL, typically shaped like
ws://HOST:PORT/devtools/browser/<id>, inbrowserWSEndpointwhen callingpuppeteer.connect(). - After connecting, create a CDP session and send the protocol command through
session.send().
The endpoint format and lookup are documented in the endpoint reference. A remote browser must be running and its debugging endpoint must be accessible to the process making the connection.
Runtime and version considerations
The official API pages referenced here displayed Puppeteer version 25.12.0 when accessed on October 3, 2026. Option availability and behavior can change between releases, so check the API reference for the version installed in your project.
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Puppeteer’s browser-compatible build can connect over WebSocket to an already running browser. The browser runtime guide says launching or downloading a browser is unsupported there because those operations depend on Node.js APIs. Use Node.js for workflows that must launch or download a browser; see Running Puppeteer in the browser.
The ConnectOptions reference states that the protocol defaults to CDP when connecting to a browser, CDP when launching Chrome, and WebDriver BiDi when launching Firefox. It also lists protocolTimeout with a default of 180,000 milliseconds for individual CDP calls; consult the versioned ConnectOptions reference before changing connection settings.
Rank #4
Troubleshooting
connect()cannot connect: Check that the WebSocket endpoint is complete, reachable from the client, and belongs to a running browser. Verify the endpoint using the documentedwsEndpoint()or/json/versionlookup.- A command fails or returns an unexpected result: Confirm that the protocol method and parameter names match the browser’s CDP version. Use
CDPSession.send()for the command rather than passing a method name to the transport interface. - A custom transport sends nothing or stops receiving messages: Check that its
send,onmessage,onclose, andclosebehavior correctly bridges the underlying connection. The API reference does not prescribe buffering or reconnection behavior, so inspect and test those parts in your adapter. - Browser launch fails in a browser runtime: That runtime supports connecting to an existing browser, not launching or downloading one. Perform launch and download operations in Node.js.
- A CDP call exceeds its timeout: Check the connection and command’s execution conditions, then review the installed version’s
protocolTimeoutsetting in ConnectOptions.
Or skip the browser setup
For a website screenshot rather than a custom Puppeteer transport, ScreenshotNeo provides a screenshot API and MCP server. One GET request returns an image or PDF; the API documentation is at ScreenshotNeo docs.
Quick Recap
Best Value
- Used Book in Good Condition
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
ScreenshotNeo accepts cookie or consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; those steps can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits cost nothing, with page verdict and billing status reported in response headers. Its MCP server gives AI agents tools for screenshots, page information, and PDF capture. The Free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Fix the driver behind crashes, sound loss and screen glitches3Clear out junk files and repair common Windows errorsSign up for ScreenshotNeo’s free plan.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

