To generate website screenshots with Puppeteer on an Indian VPS, install a supported Node.js release and Puppeteer’s managed Chrome for Testing browser, install any required Linux libraries, then launch Chrome, navigate to the page, and call page.screenshot(). This guide uses Debian or Ubuntu and focuses on a safe, repeatable deployment—not a claim about a particular VPS’s screenshot speed.
What you need before installing Puppeteer
- A Debian or Ubuntu VPS image on a supported architecture. Puppeteer’s requirements page lists Linux x64 and arm64 for Chrome for Testing.
- Node.js 22.12 or newer for Puppeteer 25.12.0, the version shown by the requirements page checked for this guide. Check the current system requirements against the exact Puppeteer release and VPS image you select; version requirements can change.
- Permission to install packages and run a browser process. Puppeteer’s browser needs Linux shared libraries, and its install process needs to download Chrome unless you manage the browser separately.
A VPS is useful when screenshots must run on a server, on a schedule, or as part of an application. Choose resources based on your workload and test your target pages: the available specifications here do not establish how many concurrent browser pages any given plan can sustain.
As an Amazon Associate I earn from qualifying purchases.
Choose a VPS by resources and renewal terms
As one current India-facing example, Hostinger’s India page advertises its KVM 1 VPS with 1 vCPU, 4 GB RAM, 50 GB NVMe storage, and 4 TB bandwidth at ₹599 per month; it lists renewal at ₹999 per month on a two-year term. This is a provider offer, not an independent performance test or proof that it is the cheapest option. Check the Hostinger India VPS page and checkout details before buying, since offers and terms can change.
Compare prospective plans on the factors that affect both operation and recovery:
#1 Best Overall
- Recurring cost, renewal cost, and the billing commitment needed to get the advertised rate.
- vCPU and RAM, then measure your own browser workload instead of assuming a concurrency figure.
- Storage and bandwidth, including whether logs, downloaded files, or retained screenshots will consume disk space.
- Data-center location relative to the websites being captured and the users who need the resulting images.
- Backups, recovery options, root access, and permission to install Chrome’s dependencies.
- Provider restrictions that could affect browser automation or outbound requests.
Install Node.js, Puppeteer, and its browser
Install a supported Node.js release using the method appropriate for your chosen Debian or Ubuntu image. Then create a project and install the standard puppeteer package:
mkdir site-capture
cd site-capture
npm init -y
npm install puppeteer
The standard package downloads a compatible Chrome for Testing browser during installation. Package-manager settings or deployment systems that block lifecycle scripts can prevent that download. If installation scripts were blocked, run Puppeteer’s documented browser installer explicitly:
npx puppeteer browsers install
puppeteer-core is different: it does not download Chrome. Use it only if you have chosen to manage the browser binary yourself and will configure Puppeteer to launch that browser. See Puppeteer’s installation guide for the documented installation options.
Check Linux libraries before debugging your script
Chrome may fail to start if the VPS image lacks shared libraries it expects. Puppeteer’s troubleshooting guide lists common Debian dependencies and describes checking Chrome for missing shared libraries. The exact set depends on the Chrome version and Linux image, so use that guide for your environment rather than copying an old package list onto an unrelated distribution.
Rank #2
If launch reports a missing library, inspect the error for the specific shared-library name, verify which package provides it on your distribution, install that package, and retry. If the binary itself is absent, confirm that Puppeteer’s install script ran or use npx puppeteer browsers install.
Capture and save a screenshot with Node.js
Create capture.js in the project directory. This example sets a viewport, waits for the page’s load event, saves a PNG, and closes the browser even if navigation or capture fails:
const puppeteer = require('puppeteer');
async function main() {
const browser = await puppeteer.launch();
try {
const page = await browser.newPage();
await page.setViewport({ width: 1365, height: 900, deviceScaleFactor: 1 });
await page.goto('https://example.com', {
waitUntil: 'load',
timeout: 30_000,
});
await page.screenshot({ path: 'page.png', type: 'png' });
} finally {
await browser.close();
}
}
main().catch((error) => {
console.error(error);
process.exitCode = 1;
});
Run it with:
node capture.js
The output file, page.png, is written to the current working directory. Puppeteer’s screenshot guide documents the screenshot API and examples.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Viewport capture or full-page capture
The example captures the visible viewport. Set the viewport dimensions to control the screenshot’s CSS-pixel width and height; use deviceScaleFactor when you need a higher-density output. For a page-length image, change the screenshot call to:
Rank #3
await page.screenshot({ path: 'page-full.png', type: 'png', fullPage: true });
Full-page images can be much taller and use more memory than viewport captures, especially for long pages. Test representative pages and avoid requesting full-page output when a viewport image meets the requirement.
Wait for the content you actually need
waitUntil: 'load' waits for the load event, but it does not guarantee that every client-rendered widget, delayed image, or animation has finished. If a specific element signals readiness, wait for it before capture:
await page.goto('https://example.com', { waitUntil: 'domcontentloaded', timeout: 30_000 });
await page.waitForSelector('main article', { timeout: 15_000 });
await page.screenshot({ path: 'article.png' });
Choose a readiness condition that matches the page. Waiting for a selector can be more reliable than adding an arbitrary long delay, but the selector must exist on the target page. Navigation, selector, and screenshot failures should be handled and logged by the calling application.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Run captures reliably and securely
Keep concurrency bounded
Each browser and page consumes resources, and page complexity varies. Start with a small number of workers, monitor CPU and memory under the actual target workload, and raise concurrency only after testing. Set navigation and selector timeouts so a slow or unresponsive page does not occupy a worker indefinitely. No fixed throughput or safe concurrency level can be inferred from a VPS’s advertised vCPU and RAM alone.
Rank #4
Always close browser processes
Use try/finally around browser work, as in the example, so an error does not leave a Chrome process running. In a production service, also handle job cancellation and process shutdown so active browser work can be closed cleanly.
Do not make disabling the sandbox a routine fix
Chrome’s sandbox helps protect the host from untrusted web content. Puppeteer strongly discourages launching with --no-sandbox. Do not add that flag simply to silence a launch error; diagnose the Linux environment and run the browser in a configuration that preserves sandboxing where possible. If your hosting environment forces a less isolated setup, understand and reduce the risk before capturing pages you do not control.
Troubleshooting common failures
| Symptom | Likely cause | What to check or change |
|---|---|---|
| Chrome executable not found | The managed browser download did not run, or the project uses puppeteer-core without a browser configured. |
For puppeteer, run npx puppeteer browsers install. For puppeteer-core, install and configure a compatible browser yourself. |
| Browser fails to start with a missing shared library | A required Linux dependency is absent from the VPS image. | Use the error’s library name and Puppeteer’s troubleshooting guide to identify the matching dependency for your distribution. |
| Navigation times out | The target is slow, unreachable, or does not reach the selected navigation condition in time. | Check that the VPS can reach the URL, choose an appropriate readiness condition, and set a timeout that fits the application. Do not assume a timeout means the page is permanently unavailable. |
| Screenshot misses dynamic content | The page’s load event happened before the content you need appeared. | Wait for a relevant selector or other application-specific readiness signal before taking the screenshot. |
| VPS runs out of memory or becomes overloaded | Pages may be unusually large, full-page capture may create large images, or too many browser tasks may run at once. | Reduce concurrency, avoid unnecessary full-page captures, and monitor memory and CPU under representative jobs. |
Launch only works with --no-sandbox |
The execution environment or permissions may be incompatible with Chrome’s sandbox. | Investigate the environment and security model instead of treating the flag as a default fix; the sandbox protects the host from web content. |
Or skip the browser setup
If you do not want to install and maintain Node.js, Chrome, and Linux browser libraries on a VPS, ScreenshotNeo is a website screenshot API and MCP server. One GET request returns an image or PDF; its documentation covers request options.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp
Cookie banners are accepted and removed before capture, along with known consent platforms, newsletter popups, and chat widgets; each of those steps can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits cost nothing, and the response identifies the page verdict and billing status. An MCP server provides take_screenshot, get_page_info, and capture_pdf tools for AI agents and 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 free for 1,000 screenshots a month, with no card required.
Cost and operational considerations
With a self-hosted Puppeteer setup, budget for the VPS billing commitment and renewal rate, storage for any screenshots you retain, and the time needed to keep Node.js, Puppeteer, Chrome, and Linux libraries working together. A VPS price or resource list alone does not establish the cost per successful screenshot: that depends on your workload, capture frequency, retries, and retention policy.
For a hosted API, compare its per-plan allowance and billing behavior with the cost and operational work of running Chrome yourself. ScreenshotNeo lists a free allowance of 1,000 shots per month and paid plans starting at $5 for 3,000; its other listed plans are Growth at $15 for 15,000, Pro at $39 for 60,000, Scale at $99 for 250,000, and Business at $249 for 1,000,000. Yearly billing gives two months free, and every feature is available on every plan. These are ScreenshotNeo’s stated plan prices and allowances; check its site for current terms.
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 & 11Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteFrequently Asked Questions
Can I use Puppeteer on an ARM-based Indian VPS?
Puppeteer’s requirements page lists Linux arm64 as a supported Chrome for Testing platform. Confirm that the exact VPS image and Puppeteer release you plan to use meet the current requirements.
Do I need to install Chrome separately when I install Puppeteer?
The standard puppeteer package downloads a compatible Chrome for Testing browser. puppeteer-core does not, so you must manage and configure a browser yourself.
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.




