What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

To disable Puppeteer’s emulated Bluetooth adapter, call await page.bluetooth.disableEmulation(). The method is marked experimental, so check that it exists in your installed Puppeteer version. If you control Chrome through the Chrome DevTools Protocol (CDP) directly, send BluetoothEmulation.disable on a CDP session attached to the page.

Disable emulated Bluetooth with Puppeteer

Call the method on the page’s Bluetooth interface after you have created the page and enabled Bluetooth emulation:

await page.bluetooth.disableEmulation();

Puppeteer documents this as an experimental method for disabling the emulated adapter. Its API reference includes the call in the BluetoothEmulation documentation. Because it is experimental, availability can depend on the Puppeteer version in your project; check the reference and your installed package if the method is missing.

Complete example

This example launches Puppeteer, creates a page, disables its emulated Bluetooth adapter, and closes the browser. It assumes Puppeteer is already installed in the project.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();

  try {
    const page = await browser.newPage();

    // Disable the emulated Bluetooth adapter for this page.
    await page.bluetooth.disableEmulation();
  } finally {
    await browser.close();
  }
})();

If your code enabled Bluetooth emulation earlier, call the disable method when you no longer want that emulated state. The method concerns the emulated adapter, not the computer’s physical Bluetooth radio.

Disable Bluetooth emulation through CDP

If your script already uses the Chrome DevTools Protocol, send the protocol command BluetoothEmulation.disable through a session attached to the page. Puppeteer documents page.createCDPSession() for creating such a session; the protocol reference describes the command as disabling the BluetoothEmulation domain.

const session = await page.createCDPSession();
await session.send('BluetoothEmulation.disable');

Complete example

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();

  try {
    const page = await browser.newPage();
    const session = await page.createCDPSession();

    await session.send('BluetoothEmulation.disable');

    await session.detach();
  } finally {
    await browser.close();
  }
})();

Use the higher-level Puppeteer method when you want the page’s Bluetooth API. Use the CDP command when your automation already sends protocol commands or needs to work at that lower level. The CDP BluetoothEmulation reference is the rolling tot version, so confirm that the connected Chrome version supports the command.

Understand what gets disabled

Both methods disable Bluetooth emulation. They are not documented as a way to switch off a machine’s physical Bluetooth radio. To turn off real Bluetooth hardware, use the operating system or device controls.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Also, page.emulate(device) is not a Bluetooth toggle. Puppeteer documents that shortcut as setting a device’s user agent and viewport through Page.setUserAgent() and Page.setViewport(); it does not describe Bluetooth emulation. See the Puppeteer Page.emulate() documentation.

Account for Bluetooth state shared in a browser context

The Web Bluetooth specification expects emulated adapters to be isolated per top-level navigable. Chromium’s current implementation is tied to the browser context instead, so pages in the same context may interfere with one another’s Bluetooth emulation state. If separate pages need independent emulation states, account for this behavior rather than assuming that each page is isolated. The Puppeteer API documents this scope caveat in its BluetoothEmulation reference.

Troubleshoot the disable call

  • disableEmulation is undefined: The Puppeteer method is experimental. Check the installed Puppeteer version and its API reference; if you are already using CDP, try sending BluetoothEmulation.disable through a page-attached session.
  • The CDP command is unsupported: Check the Chrome version controlled by Puppeteer and compare it with the rolling tot protocol reference. The protocol command’s availability depends on the connected browser.
  • The computer’s Bluetooth remains on: These calls target emulation, not the physical radio. Disable hardware Bluetooth in the operating system or device settings.
  • Another page seems to affect the emulated state: Pages sharing a browser context may share Bluetooth emulation state in Chromium’s current implementation. Do not assume per-page isolation.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup

If your goal is to capture a website screenshot rather than control Bluetooth emulation, ScreenshotNeo provides a one-request screenshot API. It is a different task: it does not disable Bluetooth emulation.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

See the ScreenshotNeo documentation for API details. It removes cookie banners, newsletter popups, and chat widgets before capture; bot checks, blank pages, and failed loads are never billed. It also has an MCP server so AI agents can take screenshots. The Free plan includes 1,000 screenshots per month with no card, and paid plans start at $5 for 3,000.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Learn more at ScreenshotNeo, or sign up for 1,000 free screenshots a month with no card.

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.