What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
In a typical Node.js project, install Puppeteer and its plugin wrapper with npm install puppeteer puppeteer-extra. Puppeteer downloads a compatible browser during installation; then you can import puppeteer-extra in place of Puppeteer and register any optional plugins with .use().
Install Puppeteer Extra for a local project
Open a terminal in your project directory and run:
npm install puppeteer puppeteer-extra
This installs the puppeteer-extra wrapper and the usual Puppeteer package, which downloads a compatible Chrome for Testing and a chrome-headless-shell. The browser download can be large and is stored in Puppeteer’s cache by default; the exact size depends on the platform and version. The Puppeteer project’s installation guide displayed approximate downloads of 170 MB for macOS, 282 MB for Linux and 280 MB for Windows when retrieved on September 29, 2026, so allow disk space and network time accordingly. Puppeteer installation guide.
If you use Yarn instead, the package README documents:
yarn add puppeteer puppeteer-extra
For a plugin-enabled setup, install each plugin as a separate dependency. For example, to add Stealth:
#1 Best Overall
npm install puppeteer-extra-plugin-stealth
The plugin is optional. If you only need the wrapper, install neither a plugin nor its import, and do not call .use().
Run a minimal Puppeteer Extra script
Save this as index.js after installing the packages:
const puppeteer = require('puppeteer-extra')
async function main() {
const browser = await puppeteer.launch()
try {
const page = await browser.newPage()
await page.goto('https://example.com')
console.log(await page.title())
} finally {
await browser.close()
}
}
main().catch(error => {
console.error(error)
process.exitCode = 1
})
Run it with:
node index.js
The wrapper presents a Puppeteer-style interface. The finally block closes the browser whether navigation succeeds or throws, avoiding a leftover browser process. For a plugin-enabled version, import and register the plugin before launching:
Rank #2
const puppeteer = require('puppeteer-extra')
const StealthPlugin = require('puppeteer-extra-plugin-stealth')
puppeteer.use(StealthPlugin())
async function main() {
const browser = await puppeteer.launch()
try {
const page = await browser.newPage()
await page.goto('https://example.com')
console.log(await page.title())
} finally {
await browser.close()
}
}
main().catch(error => {
console.error(error)
process.exitCode = 1
})
The installation and registration pattern is the same for other plugins: install the plugin package, require it, create its plugin instance, and pass that instance to puppeteer.use(). The package README gives Stealth and Adblocker as examples of separately installed add-ons. Plugin availability and compatibility can change; check the specific plugin’s current documentation before relying on it.
Choose the browser package that fits your setup
| Setup | Install | Browser responsibility |
|---|---|---|
| Typical local development | puppeteer and puppeteer-extra |
puppeteer downloads a compatible Chrome for Testing and headless shell. |
| Browser managed separately | puppeteer-core and puppeteer-extra |
You supply a managed local browser path or channel, or connect to a remote browser. The package does not download Chrome. |
| Existing Puppeteer-compatible implementation | puppeteer-extra plus the implementation you already use |
Pass the implementation to the wrapper using addExtra. |
Use puppeteer for the usual local install
This is the simplest path when the project can download and manage its own browser. The browser and Puppeteer versions are selected to work together by the installation process; you still need to account for the download and the runtime libraries your operating system may require. See the official installation guide for platform-specific setup details.
Use puppeteer-core for a managed or remote browser
Install the core package instead of puppeteer when your deployment supplies a browser or connects to one elsewhere:
npm install puppeteer-core puppeteer-extra
puppeteer-core does not download Chrome. For a local browser that you manage, provide an explicit executablePath or an installed standard channel; for a remote browser, provide the connection details supported by that browser. The Puppeteer project says puppeteer-core is driven through its programmatic interface and assumes no defaults. Puppeteer installation guide.
With a locally managed executable, the launch call has this shape:
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →const puppeteer = require('puppeteer-extra')
async function main() {
const browser = await puppeteer.launch({
executablePath: '/absolute/path/to/chrome'
})
try {
const page = await browser.newPage()
await page.goto('https://example.com')
} finally {
await browser.close()
}
}
main().catch(console.error)
Replace the path with the actual browser executable on your system. Do not copy a path from another machine or operating system. If you use a standard installed browser channel, configure the documented channel option instead. If your application connects to a remote browser, use the appropriate connection method rather than launching a local executable.
Rank #4
Wrap another compatible implementation with addExtra
The default puppeteer-extra export attempts to load either puppeteer or puppeteer-core. If you have a Puppeteer-compatible implementation or a non-standard browser package, the package’s addExtra export lets you wrap that implementation explicitly:
const { addExtra } = require('puppeteer-extra')
const puppeteer = addExtra(compatiblePuppeteerImplementation)
// Register plugins on this wrapped implementation before using it.
// puppeteer.use(YourPlugin())
compatiblePuppeteerImplementation here represents the implementation your project actually imports; it is not a package name to install or a ready-made variable. Confirm that implementation’s API is compatible and follow its instructions for browser launch or remote connection. The wrapper README describes this API at puppeteer-extra on GitHub.
Check installation scripts if Chrome is missing
A successful npm install does not always mean the browser download ran. Package managers such as npm, pnpm, Yarn, Bun and Deno can block dependency install scripts. When Puppeteer’s install script is blocked, it may install the JavaScript package without downloading Chrome, and a later launch can fail because no browser is available. Puppeteer installation guide.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Best Value
- Identify the error. If the message says Puppeteer cannot find Chrome or the browser executable, check whether the browser download was skipped rather than changing the
puppeteer-extraimport. - Install the browser manually. From the project directory, run Puppeteer’s documented command:
npx puppeteer browsers install - Retry the script. Run
node index.jsagain. If the browser is still unavailable, verify that the install command and application run in the same environment and user context. - Allow the install script if appropriate. Configure your package manager to permit Puppeteer’s install script, then reinstall the relevant dependency. The exact setting varies by package manager and version, so use the current documentation for the manager in your project.
The package-manager permission fix and the manual browser install address the same root issue in different ways: the former allows the download during dependency installation, while the latter fetches the browser explicitly afterward. Avoid assuming that syntax for one package manager applies to another.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Troubleshoot common installation and launch failures
| Symptom | Likely cause | What to do |
|---|---|---|
| Chrome cannot be found at launch | The Puppeteer install script was blocked, or a browser was not installed for this environment. | Run npx puppeteer browsers install. If you intentionally manage the browser, provide its correct path or channel instead. |
| The install appears stuck or fails while downloading | The browser download is large, the connection was interrupted, or the environment prevents the download. | Check network access and available disk space, then retry. For a restricted environment, use a browser-management approach supported by Puppeteer and configure its path or connection. |
puppeteer-extra is not found |
The command ran outside the project, or the dependency was not added to that project. | Run npm install puppeteer puppeteer-extra in the directory containing the project’s package.json, then run the script from that project. |
| A plugin import fails | The plugin package is a separate dependency and may not have been installed. | Install the exact plugin package, check the package name and import form in its documentation, and confirm it is compatible with your chosen Puppeteer implementation. |
| Launch fails with a managed browser | The executable path, browser channel, or remote connection details do not match the runtime environment. | Check that the browser exists and is accessible to the process. Use an absolute path for executablePath, or configure the correct documented channel or remote connection. |
| Works locally but fails after deployment | The deployment may not include the downloaded browser, may block install scripts, or may run under a different user or filesystem. | Ensure the deployment installs the browser in its own runtime environment, or provide a managed browser and correct launch configuration there. A browser cached on a developer workstation is not automatically available in production. |
Keep versions and runtime behavior predictable
Install puppeteer-extra, the underlying Puppeteer implementation, and any plugins as project dependencies rather than relying on a global install. Keep the project lockfile so deployments use the dependency resolution tested by the project. The package listing showed version 3.3.6 at the time it was retrieved, with a publication indication of four years ago; that listing snapshot is not a guarantee of the latest available release. The available documentation does not establish a version matrix covering every current Node.js release, package manager, Puppeteer release and plugin combination. Check current package metadata and plugin documentation before upgrading, especially if a plugin is central to production behavior. npm package listing.
- Budget for browser downloads in CI and deployment images, not only on a developer machine.
- Use
puppeteer-coreif your infrastructure deliberately owns browser installation and updates. - Close browsers in a
finallyblock so an exception does not leave processes running. - When upgrading, validate both browser launch and each registered plugin in the target environment.
Or skip the browser setup
If the job is simply to capture a website, ScreenshotNeo offers a one-request screenshot API and an MCP server. Its clean-shot flow accepts cookie or consent banners as a visitor and removes more than 60 known consent platforms, newsletter popups and chat widgets before capture; each of those steps can be turned off. Bot checks/CAPTCHAs, blank pages, timeouts, failed loads and cache hits are not billed, and response headers indicate the page verdict and billing status. For AI-agent workflows, its MCP server provides take_screenshot, get_page_info and capture_pdf.
For example, this cURL request saves a WebP screenshot:
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 matchcurl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp
See the ScreenshotNeo API documentation for authentication and request options. ScreenshotNeo has 1,000 free screenshots per month with no card required; paid plans start at $5 for 3,000. Learn about ScreenshotNeo, or sign up for 1,000 free screenshots a month with no card.
Frequently Asked Questions
Can I use Puppeteer Extra without a plugin?
Yes. Install and import puppeteer-extra with your Puppeteer package; plugin packages and .use() calls are optional.
Does Puppeteer Extra install Chrome by itself?
For the common setup, puppeteer performs the compatible browser download. puppeteer-extra is the wrapper; choosing puppeteer-core means you manage the browser separately.
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.
Free tools Windows power users keep installed
One-click scans. No signup required.

