Yes. Puppeteer works with Microsoft Edge because Edge is Chromium-based and exposes the Chrome DevTools Protocol that Puppeteer uses. For an existing Edge installation, Microsoft’s documented approach is to install puppeteer-core, find the Edge executable, and pass that path in executablePath. The important qualification is that Puppeteer guarantees its bundled browser, not every externally selected Edge build, so test the exact Edge and Puppeteer versions you plan to deploy.
Why Puppeteer can control Edge
Microsoft states that Puppeteer provides a high-level API for controlling Chromium-based browsers, including Microsoft Edge, through the DevTools Protocol. Current Edge releases use Chromium, and Microsoft says Edge’s DevTools Protocol matches Chrome’s protocol. Puppeteer can therefore send the same navigation, page, DOM, screenshot, PDF, input, and network commands to Edge that it sends to Chromium.
This is protocol compatibility, not a promise that every Edge release and every Puppeteer feature behaves identically. Microsoft documents the integration, while Puppeteer’s own support policy is narrower: its supported-browser documentation focuses on Chrome and Firefox, and its LaunchOptions documentation warns, “Puppeteer is only guaranteed to work with the bundled browser, so use this setting at your own risk.”
Choose between bundled Chromium and installed Edge
Use Puppeteer’s bundled browser
The full puppeteer package downloads the browser revision selected by Puppeteer. This is usually the simplest choice for repeatable CI jobs because the package and browser revision are designed together. You do not need to discover an operating-system-specific Edge path, but you are automating the bundled browser rather than Microsoft Edge.
#1 Best Overall
Use Microsoft Edge with puppeteer-core
puppeteer-core contains the automation library without downloading a browser. Supply the executable path for the Edge channel installed on the machine. This is the right route when tests must run against Edge itself, an enterprise-managed installation, or a particular Edge channel.
| Choice | Browser selected | Main advantage | Trade-off |
|---|---|---|---|
puppeteer |
Puppeteer’s bundled browser | Integrated package/browser setup | It is not Microsoft Edge |
puppeteer-core plus executablePath |
Your installed Edge executable | Tests the real Edge build and channel | You manage the path and must validate compatibility |
Install the packages
Create a project and install the core package:
mkdir edge-puppeteer
cd edge-puppeteer
npm init -y
npm install puppeteer-core
Use puppeteer instead if you want Puppeteer to download and launch its bundled browser:
npm install puppeteer
Keep Node.js, Puppeteer, and Edge versions under source control or a documented deployment policy. Re-test after upgrading any of them.
Find the Edge executable path
Do not copy a single Windows path into every setup guide. Install locations vary by operating system, Edge channel (Stable, Beta, Dev, or Canary), machine architecture, enterprise policy, and whether Edge was installed per-user or system-wide.
Rank #2
- Open Microsoft Edge.
- Enter
edge://versionin the address bar. - Copy the value shown for the executable path.
- Pass that exact path to Puppeteer, adjusting quoting for spaces and escaping rules in your shell or JavaScript string.
Microsoft’s example uses an Edge Dev installation on Windows, but it is an example rather than a universal location. On Linux, macOS, and Windows, verify the path on the machine where the script actually runs.
Launch Edge with JavaScript
This complete script launches the installed Edge executable, opens a page, writes a title and URL, captures a screenshot, and closes the browser:
const puppeteer = require('puppeteer-core');
(async () => {
const browser = await puppeteer.launch({
executablePath: process.env.EDGE_PATH,
headless: true,
args: ['--no-sandbox']
});
try {
const page = await browser.newPage();
await page.goto('https://example.com', {
waitUntil: 'networkidle2',
timeout: 60000
});
console.log({
title: await page.title(),
url: page.url()
});
await page.screenshot({path: 'edge-example.png', fullPage: true});
} finally {
await browser.close();
}
})();
Run it after setting EDGE_PATH to the path copied from edge://version. On Windows PowerShell, for example:
$env:EDGE_PATH = 'C:pathtomsedge.exe'
node capture.js
On macOS or Linux:
EDGE_PATH='/path/to/microsoft-edge' node capture.js
--no-sandbox can be necessary in some restricted containers, but it reduces browser sandboxing. Prefer the default sandbox in a normal desktop or properly configured CI runner; add this flag only when your runtime requires it and apply your organization’s container-security controls.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchRank #3
TypeScript and modern module syntax
import puppeteer from 'puppeteer-core';
const edgePath = process.env.EDGE_PATH;
if (!edgePath) throw new Error('Set EDGE_PATH to the Edge executable');
const browser = await puppeteer.launch({
executablePath: edgePath,
headless: true
});
const page = await browser.newPage();
await page.goto('https://example.com', {waitUntil: 'domcontentloaded'});
await page.pdf({path: 'example.pdf', format: 'A4'});
await browser.close();
Use a recent Node.js release that supports your module configuration, or keep the CommonJS example when your project uses require.
Make Edge automation reliable
Wait for the condition your page needs
Choose a deliberate readiness condition: domcontentloaded for initial HTML, load for load-event resources, networkidle2 for pages that should become mostly quiet, or an explicit selector for application content. Single-page apps and analytics calls can prevent a network-idle condition from ever representing “ready,” so selector waits are often more precise.
Set timeouts and close resources
Use realistic navigation and selector timeouts, and always close the browser in a finally block. A failed test that leaves Edge processes running can exhaust memory and file descriptors in CI.
Pin and validate versions
Record the Edge version, Puppeteer version, operating system, and channel in CI logs. Run a smoke test that launches Edge, navigates to a controlled page, evaluates JavaScript, and creates one artifact. Repeat it after browser or dependency updates. The externally selected executable is outside Puppeteer’s compatibility guarantee.
Rank #4
Use a visible browser when diagnosing
Set headless: false during local troubleshooting. You can also slow actions with Puppeteer options, inspect the page manually, and compare the result with the same script against Puppeteer’s bundled browser. Do not assume a difference is an Edge defect until the target URL, profile, extensions, policies, and browser versions are controlled.
Common errors and fixes
“Failed to launch the browser process”
- Cause: The path is wrong, points to a directory, or the file is not executable.
- Fix: Copy the path again from
edge://version, verify the file exists on the runner, and check permissions.
“No executable was found” or a missing browser
- Cause: You installed
puppeteer-corebut did not provideexecutablePath. - Fix: Set
EDGE_PATHand pass it, or install and use the fullpuppeteerpackage for its bundled browser.
The script works locally but not in CI
- Cause: CI has a different OS, Edge channel, path, sandbox policy, user permissions, or missing shared libraries.
- Fix: Install the intended Edge channel in the image, discover or configure its path at runtime, log versions, and address the runner’s sandbox and dependency requirements rather than copying a developer-machine path.
Navigation times out
- Cause: Slow resources, redirects, a login wall, bot protection, or a page that never becomes idle.
- Fix: Check the URL in visible mode, choose a more suitable
waitUntilcondition, wait for a specific selector, and set a timeout appropriate to the page. A longer timeout does not fix a permanently blocked navigation.
Selectors or screenshots differ from normal Edge
- Cause: Headless rendering, viewport, device scale, locale, extensions, profile data, cookies, or enterprise policies differ.
- Fix: Set viewport and navigation state explicitly, reproduce with
headless: false, and test the same Edge channel and profile assumptions used in production.
When to use a screenshot API instead
If your requirement is simply “return an image or PDF for a URL,” running and maintaining a browser can be unnecessary. ScreenshotNeo is a website screenshot API and MCP server. It removes cookie-consent banners, newsletter popups, and chat widgets before capture; only clean shots are billed, while bot checks, blank pages, timeouts, failed loads, and cache hits cost nothing and are reported with X-Page-Verdict and X-Billed headers. Its MCP tools—take_screenshot, get_page_info, and capture_pdf—let Claude, Cursor, or another MCP client request captures.
Or skip the browser setup
For a direct capture, use the API documented at https://screenshotneo.com/docs/:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
ScreenshotNeo supports PNG, JPEG, WebP, and PDF, plus full-page and element captures, device presets, retina scale, custom CSS and JavaScript, waits, headers, cookies, blocking rules, caching, signed links, async jobs, webhooks, bulk capture, and usage reporting. The Free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000. Create a free ScreenshotNeo account.
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Is Edge support guaranteed?
No. Microsoft explicitly documents Puppeteer controlling Edge, but Puppeteer guarantees only its bundled browser. An installed Edge executable is a supported practical integration, not a universal compatibility contract. Validate the exact Edge release, channel, operating system, Puppeteer version, and features—especially PDFs, downloads, permissions, authentication, and headless rendering—in your own environment before relying on them in production.
Best Value
Frequently Asked Questions
Can I use the full puppeteer package to launch Microsoft Edge?
Yes, but the full package is designed to launch its bundled browser. To target an installed Edge executable, use puppeteer-core with executablePath.
Where do I find the correct Edge path?
Open edge://version in Edge and copy the executable path shown there. The value differs by operating system and Edge channel.
Does puppeteer-core download Edge?
No. puppeteer-core does not download a browser; you install Edge separately and provide its executable path.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Clear out junk files and repair common Windows errors3Fix the driver behind crashes, sound loss and screen glitchesShould Edge automation run headless?
Use headless mode for unattended jobs and headful mode to diagnose rendering, login, policy, or selector problems. Test the mode you will deploy.
Quick Recap
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.

