What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Puppeteer involves two different download tasks: controlling files that a web page downloads, and installing or choosing the browser executable Puppeteer launches. For page downloads, configure the browser’s download behavior and destination path. For the browser itself, use the browser bundled with puppeteer for the simplest compatible setup, or explicitly configure an externally managed browser and accept the compatibility trade-off.
Page downloads and browser installation are separate
A Puppeteer script can cause a website to download a PDF, image, or other file; that file is handled by the browser page’s download policy. Separately, Puppeteer needs a browser executable to run. Installing the puppeteer package normally installs browser binaries, while puppeteer-core does not. Configure each workflow independently.
As an Amazon Associate I earn from qualifying purchases.
Allow a page to download files
The Puppeteer 25.12.0 DownloadBehavior API reference defines the download policy and destination. In particular, downloadPath is required when the policy is allow or allowAndName. With allowAndName, downloaded files use download GUIDs as their filenames, not their original names.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →import puppeteer from 'puppeteer';
const browser = await puppeteer.launch();
try {
const page = await browser.newPage();
// Configure downloads for this page's browser context.
await page.setDownloadBehavior({
policy: 'allow',
downloadPath: '/absolute/path/to/downloads',
});
await page.goto('https://example.com', { waitUntil: 'domcontentloaded' });
await page.click('a[href="/files/report.pdf"]');
// The download is initiated by the click. Identify and wait for the
// resulting file using a method appropriate to your application.
} finally {
await browser.close();
}
Use an absolute directory that exists and is writable by the process running Chrome. The example uses allow so the browser retains the downloaded file’s ordinary naming behavior. Choose allowAndName only when GUID-based filenames suit your workflow. A policy that denies downloads prevents the page’s requests from being saved.
#1 Best Overall
- Easily store and access 2TB to content on the go with the Seagate Portable Drive, a USB external hard drive
- Designed to work with Windows or Mac computers, this external hard drive makes backup a snap just drag and drop
- To get set up, connect the portable hard drive to a computer for automatic recognition no software required
- This USB drive provides plug and play simplicity with the included 18 inch USB 3.0 cable
- The available storage capacity may vary.
Wait for and identify the file
The API contract establishes the policy and path settings, but it does not provide a universal high-level recipe for correlating a particular click with a particular completed file. Your application should use a download-completion mechanism supported by its installed Puppeteer version or monitor the configured directory for the expected result. Avoid treating the click promise alone as proof that the file has finished downloading; a click can return before the transfer completes.
Install the browser Puppeteer launches
Installing puppeteer downloads a compatible Chrome for Testing browser and chrome-headless-shell by default. The installation guide documents the default browser cache location as $HOME/.cache/puppeteer since Puppeteer 19.0.0, along with configuration and environment-variable options for changing installation behavior. See the Puppeteer installation guide for the version you use.
Rank #2
- Easily store and access 5TB of content on the go with the Seagate portable drive, a USB external hard Drive
- Designed to work with Windows or Mac computers, this external hard drive makes backup a snap just drag and drop
- To get set up, connect the portable hard drive to a computer for automatic recognition software required
- This USB drive provides plug and play simplicity with the included 18 inch USB 3.0 cable
- The available storage capacity may vary.
npm install puppeteer
For a normal local setup, launch the bundled browser without specifying an 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 glitchesimport puppeteer from 'puppeteer';
const browser = await puppeteer.launch({ headless: true });
try {
const page = await browser.newPage();
await page.goto('https://example.com');
console.log(await page.title());
} finally {
await browser.close();
}
puppeteer-core is the package for remote or externally managed browsers; it does not download Chrome. If you use it, provide a browser through your deployment or remote-browser setup rather than expecting installation of the package to supply one.
Rank #3
- Easily store and access 1TB to content on the go with the Seagate Portable Drive, a USB external hard drive.Specific uses: Personal
- Designed to work with Windows or Mac computers, this external hard drive makes backup a snap just drag and drop. Reformatting may be required for Mac
- To get set up, connect the portable hard drive to a computer for automatic recognition no software required
- This USB drive provides plug and play simplicity with the included 18 inch USB 3.0 cable
- The available storage capacity may vary.
Change where or how browsers are installed
If a package manager or deployment environment blocks install scripts, the installation guide documents manually installing the browser. It also describes configuration and environment variables for managing browser downloads and cache behavior. Keep the package version, browser build, and deployment cache consistent so a runtime can find the executable that installation produced.
Use an externally managed Chrome executable
When you need a system-installed browser, set executablePath to its executable. Puppeteer also documents selecting an installed browser with an appropriate channel. Its compatibility guarantee applies to the bundled browser; arbitrary externally managed browser versions are not guaranteed to work. The launch options reference recommends setting browser when you use a custom executable path. Consult the version-specific LaunchOptions API reference.
Rank #4
- Easily store and access 4TB of content on the go with the Seagate Portable Drive, a USB external hard drive.Specific uses: Personal
- Designed to work with Windows or Mac computers, this external hard drive makes backup a snap just drag and drop
- To get set up, connect the portable hard drive to a computer for automatic recognition no software required
- This USB drive provides plug and play simplicity with the included 18 inch USB 3.0 cable
- The available storage capacity may vary.
import puppeteer from 'puppeteer';
const browser = await puppeteer.launch({
browser: 'chrome',
executablePath: '/path/to/chrome',
headless: true,
});
try {
const page = await browser.newPage();
await page.goto('https://example.com');
console.log(await page.title());
} finally {
await browser.close();
}
Replace the example path with the actual executable path for the operating system and environment where the script runs. An installed browser on a developer’s workstation may not exist at the same path in a container or production host.
Recommended Free Tools
| Choice | What it means | Main trade-off |
|---|---|---|
puppeteer with bundled browser |
Package installation downloads Chrome for Testing and chrome-headless-shell by default. | Simpler version pairing; requires browser installation and cache to be available. |
puppeteer-core |
Package does not download Chrome; intended for remote or externally managed browsers. | You manage browser availability and compatibility. |
| Custom executable or channel | Launch an installed browser instead of relying only on the bundled executable. | Compatibility is not guaranteed for arbitrary browser versions. |
Pin a browser build and verify its archive
For deployments that install browsers separately, the @puppeteer/browsers installation options let you select a browser, build ID, platform, and cache directory. Pinning a build ID makes the intended browser build explicit. You can also provide an expected SHA-256 hash for the downloaded archive; installation fails if the hash does not match. If you omit expectedHash, the documented installation proceeds without integrity verification. See the InstallOptions reference.
Best Value
- [Upgraded Version] - This external hard drive features a mirrored logo stripe combined with a striped anti-slip design, and the rounded corners of the casing make it easier to grip. The stripes also have a heat dissipation function, ensuring stable and fast data transfer.
- 【Ultra-thin and quiet】 - The motherboard adopts JMicron 578 noise-free solution, giving you a quiet working environment. Lightweight and portable size designed to fit in your pocket for easy portability.
- 【Ultra-Fast Data Transfers】 - Pairing this external hard drive with JMicron 578 solution USB 3.0 and USB 2.0 interfaces enables blazing-fast data transfer. It boasts theoretical read speeds of up to 125MB/s and write speeds of up to 103MB/s.
- 【Plug and Play】 - With no software to install, just plug it in and the drive is ready to use.The hard disk chip is wrapped with an aluminum anti-interference layer to increase heat dissipation and protect data.
- 【What You Get】 - 1 x Portable Hard Drive, 1 x USB 3.0 Cable, 1 x User Manual, Gift-type shell packaging ,Three-year manufacturer's warranty and free technical support services.
Custom browser providers are not officially supported. If you choose one, you are responsible for compatibility, testing, and maintenance. A custom provider can be useful when your environment requires a particular source, but it transfers those operational responsibilities to your team.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Choose the headless browser mode deliberately
Puppeteer’s current headless mode is selected with headless: true. Setting headless: 'shell' selects chrome-headless-shell. The shell does not completely match regular Chrome; the Puppeteer guide describes it as an option where performance may matter and the complete feature set is not needed. Validate your actual page workflow in the mode you deploy rather than assuming identical behavior. See the headless modes guide.
Troubleshooting
- “Could not find Chrome” or executable missing: Confirm installation scripts ran, the expected browser was installed, and the runtime can access the configured cache. If using
puppeteer-core, provide the external or remote browser yourself. - Custom executable fails to launch: Check that
executablePathpoints to a real executable in the runtime environment, not merely a path from another machine. Confirm the browser is compatible with your Puppeteer version; the bundled browser is the guaranteed pairing. - Download does not appear: Confirm the page action actually triggers a file download, the policy is
alloworallowAndName, anddownloadPathis an existing writable directory. Make sure your script waits for the completed file rather than only for the click. - Unexpected filename: If you selected
allowAndName, GUID-based names are expected. Useallowwhen you need the browser’s ordinary filename behavior. - Archive verification fails: When
expectedHashis set, verify that it corresponds to the archive being installed. A mismatch is designed to fail installation rather than silently accept a different archive. - Behavior differs in shell headless mode: Test with
headless: trueto compare against current headless Chrome, because chrome-headless-shell is not fully behavior-identical.
Or skip the browser setup
If your goal is a screenshot rather than an automated browser workflow, ScreenshotNeo is a website screenshot API and MCP server. One GET request returns an image or PDF, without installing Puppeteer or managing Chrome. Its API accepts the same parameter names other screenshot APIs use, which can make switching easier. See the ScreenshotNeo API documentation.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
ScreenshotNeo removes cookie banners, newsletter popups, and chat widgets before capture; each cleanup step can be turned off. Bot checks and CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers report the page verdict and billing status. Its MCP server gives AI agents tools for taking screenshots, getting page information, and capturing PDFs. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000.
Sign up for ScreenshotNeo’s free plan.
Frequently Asked Questions
Does installing puppeteer-core install Chrome?
No. It does not download Chrome; it is intended for remote or externally managed browsers.
What does allowAndName do to downloaded filenames?
It uses download GUIDs as filenames.
Does Puppeteer guarantee compatibility with my system Chrome?
No. Puppeteer guarantees compatibility with its bundled browser, not arbitrary externally managed versions.
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.




