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 matchOn a Debian VPS in India, install Puppeteer’s matching Chrome for Testing build and Debian’s required shared libraries, then launch the browser from Node.js. The VPS’s location does not change Chrome’s documented Linux dependencies. Puppeteer’s standard puppeteer package downloads a compatible browser during installation; use puppeteer-core only when you will manage the browser yourself.
Check your Debian VPS before installing
Confirm the Debian release, CPU architecture, Node.js version, and which Linux user will run the screenshot job. Puppeteer’s current system-requirements guide lists Node.js 22.12 or newer and Debian or Ubuntu on x64 or arm64 for Chrome for Testing. Check the requirements for the specific Puppeteer version you install, since support and browser pairings can change. Puppeteer system requirements
As an Amazon Associate I earn from qualifying purchases.
For example, check Node and architecture with:
node --version
uname -m
cat /etc/debian_version
If your server is arm64, confirm the selected release supports that platform before proceeding. Also ensure the deployment user can access the Puppeteer browser cache; a browser installed under one user’s home directory may not be available to a service running as another user.
Install Puppeteer and its compatible browser
Recommended: let Puppeteer manage Chrome
From your Node project directory, install the standard package:
#1 Best Overall
npm install puppeteer
Ordinarily, this downloads a compatible Chrome for Testing browser as part of installation. The Linux browser download is approximately 282 MB, so allow for that download and enough disk space. Puppeteer installation guide
Some package managers or deployment configurations block install scripts. If Puppeteer installed but its browser did not, run the browser installer explicitly:
npx puppeteer browsers install
On Debian or Ubuntu, you can also ask the Puppeteer browser CLI to install Chrome and attempt to install the operating-system dependencies:
Rank #2
sudo npx puppeteer browsers install chrome --install-deps
The --install-deps option installs OS packages and therefore requires root privileges. If you prefer not to delegate dependency installation to the CLI, install the required Debian packages through your normal system administration process instead. Puppeteer browser CLI
Use puppeteer-core only for a self-managed browser
puppeteer-core does not download Chrome. Install it when you already manage a compatible browser—for example, a centrally installed browser or a remote browser—and provide the executable path when launching. Do not pair arbitrary Chrome and Puppeteer versions: check Puppeteer’s supported-browser mapping for the version you use. Puppeteer supported browsers
npm install puppeteer-core
Then point Puppeteer at the browser you installed:
const puppeteer = require('puppeteer-core');
(async () => {
const browser = await puppeteer.launch({
executablePath: '/usr/bin/google-chrome',
headless: true
});
try {
const page = await browser.newPage();
await page.goto('https://example.com', { waitUntil: 'networkidle2' });
await page.screenshot({ path: 'shot.png', fullPage: true });
} finally {
await browser.close();
}
})();
Replace /usr/bin/google-chrome with the actual path to your compatible browser. With the standard puppeteer package, the browser is managed for you, so you normally do not need to set executablePath.
Take a screenshot with Puppeteer
Save this as screenshot.js in the project where you installed puppeteer, then run node screenshot.js. This captures a full-page PNG after navigation reaches the networkidle2 condition:
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsconst puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({ headless: true });
try {
const page = await browser.newPage();
await page.goto('https://example.com', {
waitUntil: 'networkidle2',
timeout: 60000
});
await page.screenshot({ path: 'screenshot.png', fullPage: true });
} finally {
await browser.close();
}
})();
Change the URL and output filename for your job. If the site keeps making background requests, navigation may not settle promptly at a network-idle condition; choose a suitable navigation wait condition or wait explicitly for a page element your job needs.
Resolve missing Debian libraries
Chrome needs shared libraries supplied by the operating system. When launch fails with a missing-library error, inspect the Chrome executable’s dynamic dependencies rather than guessing which package to add. Puppeteer’s troubleshooting guide describes this approach and lists common Linux dependencies. Puppeteer troubleshooting
Rank #4
- Find the Chrome executable installed for Puppeteer. The browser CLI can show installed browsers with
npx puppeteer browsers list; use the reported executable path for the next check. - Run the dependency check against that executable:
ldd /path/to/chrome | grep not. - For each missing library, install the Debian package that provides it, using the dependency guidance for your Debian environment.
- Retry the screenshot as the same Linux user and service environment that will run it in production.
The diagnostic command can return no lines when it finds no unresolved shared libraries. That does not rule out other launch problems, such as an inaccessible browser cache, insufficient permissions, or an environment-specific sandbox restriction.
Troubleshoot common screenshot failures
| Symptom | Likely cause | What to check or do |
|---|---|---|
| No browser found after npm install | Install scripts were blocked, so the browser download did not run. | Run npx puppeteer browsers install as the project user, then retry. |
| Chrome exits immediately or reports a missing shared library | A required Debian library is absent. | Run ldd /path/to/chrome | grep not and install packages for the missing libraries. |
| Browser works in a shell but not under a service | The service user may have a different home directory, cache, permissions, or environment. | Check which user runs the job and confirm that user can read and execute Chrome and access the browser cache. |
| Custom Chrome launches unpredictably or fails with protocol/version errors | The browser may not match the Puppeteer release. | Use the browser installed by puppeteer, or consult the supported-browser mapping before choosing a manually managed Chrome version. |
| Navigation times out | The page may be slow, unreachable from the VPS, or still making requests. | Check the URL from the VPS, set an appropriate navigation timeout, and choose a wait condition suited to the page instead of assuming every site becomes idle. |
| Temptation to disable Chrome’s sandbox | Some Linux environments have sandbox or AppArmor-specific complications. | Diagnose the environment-specific cause first. Do not disable the sandbox as a routine fix; changing sandbox settings reduces browser isolation and has a security trade-off. |
Reliability, performance, and VPS sizing
Browser installation adds a substantial download—the Puppeteer installation guide puts the Linux Chrome for Testing download at approximately 282 MB—and the process also depends on the server’s available disk space, memory, and CPU. The reviewed documentation does not establish an Indian VPS provider, instance size, or capacity tier for screenshot workloads, so size the server against your own page complexity and concurrency rather than treating a particular tier as recommended.
Recommended Free Tools
For repeatable deployments, install dependencies and the browser during image or release preparation, run the job as a consistent non-root service user where your environment permits, and verify a real screenshot in the same environment used in production. Record the Puppeteer release and browser pairing so upgrades can be checked against the supported-browser mapping.
Best Value
Or skip the browser setup
If you want a screenshot without installing Chrome and its Linux libraries on the VPS, ScreenshotNeo provides a website screenshot API and MCP server. A single GET request can return PNG, JPEG, WebP, or PDF. For example, this cURL request captures a page as WebP; see the ScreenshotNeo API documentation for setup and options:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp
ScreenshotNeo accepts cookie or consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks or 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 offers take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients. The Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 shots.
Sign up for ScreenshotNeo’s free plan: 1,000 screenshots a month, no card required.
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.




