October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PCOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk8 min

Generate Website Screenshots in Node.js with Puppeteer on a Low-Cost Indian VPS

A practical guide to running Puppeteer on a low-cost Indian VPS: install a compatible browser, capture pages with Node.js, and handle dependencies, security, and reliability.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Compare prospective plans on the factors that affect both operation and recovery:

  • 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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:

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

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.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Frequently 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.

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Crashes, No Sound, or Screen Glitches?Free driver scan
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.