iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
You can run Puppeteer screenshot tests on a Linux VPS in India by installing a supported Node.js version, installing Puppeteer and its Chrome for Testing browser, checking Linux runtime dependencies, and running a script that saves screenshots and closes the browser reliably. A provider’s lowest-priced VM is not automatically adequate: the right size depends on your pages and concurrency, so measure your own suite before scaling it.
What you need before you start
- A Linux VPS with SSH access, enough disk for Node.js, the browser download, your project, and retained screenshot artifacts.
- A supported Node.js release. Puppeteer’s system requirements page for version 25.12.0 lists Node 22.12 or newer; check the current requirements for the Puppeteer version you install.
- A project using Node.js and a target URL accessible from the server.
- A plan for storing and pruning screenshots, plus a way to inspect test logs and the VPS’s CPU and memory use.
Puppeteer controls Chrome or Firefox, and its official overview says it runs headless by default. You do not need a graphical desktop for ordinary headless screenshot captures. See the Puppeteer overview.
Choose a VPS without guessing at capacity
A VPS provides virtualized compute; DigitalOcean calls its virtual machines Droplets. Its pricing page lists Linux options and Bangalore as a datacenter region. The following are provider-listed examples surfaced October 3, 2026, not tested recommendations for screenshot workloads. Check live availability, total price, region, and billing terms before ordering.
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 →| Example plan | Provider-listed specifications | Price listed October 3, 2026 |
|---|---|---|
| Basic | 512 MiB RAM, 1 vCPU, 10 GiB SSD, 500 GiB transfer | $4 per month |
| Basic | 1 GiB RAM, 1 vCPU, 25 GiB SSD, 1,000 GiB transfer | $6 per month |
These figures come from DigitalOcean’s Droplet pricing page. That page states per-second billing with a 60-second or $0.01 minimum became effective January 1, 2026. Neither the price nor the listed resources establishes how many concurrent screenshot jobs a plan will run reliably.
#1 Best Overall
Match the region and operating system to your work
Bangalore is one documented India-region option on the pricing page, but no latency measurements establish that it is fastest for your targets. Choose a region based on where your test targets and operations are, and measure response time from your actual VM if it matters. Puppeteer’s current system requirements list Debian/Ubuntu x64 and arm64 support for Chrome for Testing; use a supported distribution and verify the requirements for your browser revision.
Account for storage and transfer
Puppeteer’s installation guide estimates about 282 MB for the Linux Chrome for Testing download. That is the approximate browser download, not the total disk space for the OS, Node.js, project dependencies, cache, or screenshots. Screenshot volume and artifact retention determine how much additional storage and transfer you need.
Install Node.js, Puppeteer, and Chrome
- Connect to the VPS and install Node.js 22.12 or newer for Puppeteer 25.12.0. This is a version-specific requirement surfaced in 2026, not a permanent minimum; check the current system requirements before installing a newer Puppeteer release.
- Create or enter your test project directory. Use the package manager and lockfile already adopted by your project.
- Install Puppeteer: run
npm install puppeteerin an npm project. Puppeteer normally downloads a compatible Chrome for Testing browser during installation. The browser binary requires meaningful download bandwidth and disk space; its Linux download is listed as about 282 MB in the installation guide. - If install scripts were blocked, install the browser explicitly: run
npx puppeteer browsers install. This is Puppeteer’s documented manual browser-install route.
When to use puppeteer-core
puppeteer-core does not download Chrome. Choose it only when you intend to manage the browser separately; you must provide an installed browser and configure its executable path or channel. For a straightforward setup where Puppeteer manages a compatible browser, use puppeteer.
Rank #2
Check Linux dependencies if Chrome will not launch
Chrome may fail to start when shared libraries required by the browser are missing. Puppeteer’s troubleshooting guide recommends inspecting the Chrome binary with ldd chrome | grep not and installing the missing libraries for your Linux distribution. The command assumes you run it against the browser executable; locate the installed Chrome binary if chrome is not on your PATH. Package names vary by distribution and browser revision, so use the current package instructions for your chosen OS rather than copying a dependency list from a different release. See Puppeteer’s troubleshooting guide.
Do not add --no-sandbox as a routine fix. Some hosted-environment examples may use it, but disabling Chrome’s sandbox has security implications and is not a general-purpose VPS recommendation. If your specific runtime appears to require it, review current security guidance for that environment before changing launch flags.
Write a screenshot test that saves an artifact
This minimal ES module example follows Puppeteer’s documented screenshot workflow: launch the browser, open a page, navigate, capture a PNG, and close the browser. Create the artifact directory before running it.
Rank #3
- HP MicroServer Gen10 Plus Tower Server for Business with Microsoft Windows Server 2019 OS!
- Intel Xeon E-2224 Quad-Core 3.4GHz 8MB CPU, Up To 4.6GHz Turbo
- 32GB (2 x 16GB) DDR4 PC4-21300 2666MHz Unbuffered Memory
- 16TB (4 x 4TB) 7.2K 6Gb/s SATA 3.5" HDDs in RAID
- Hard drives and memory upgrades included separately NOT installed, installation required.
import puppeteer from 'puppeteer';
const browser = await puppeteer.launch();
try {
const page = await browser.newPage();
await page.goto('https://example.com', { waitUntil: 'networkidle2' });
await page.screenshot({ path: 'artifacts/example.png' });
} finally {
await browser.close();
}
Save it as screenshot.mjs and run node screenshot.mjs. The finally block closes the browser even if navigation or capture throws an error, which helps avoid leaving browser processes behind in repeated test runs. Puppeteer’s official example uses networkidle2, but that wait condition is not right for every page: applications with persistent connections or delayed rendering may need a different navigation condition or an explicit wait for the element that indicates the page is ready. Consult the screenshot guide and Page.screenshot() API.
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 →Measure resource use before increasing concurrency
No universal minimum RAM, CPU allocation, or jobs-per-hour figure is established for screenshot tests. A simple page and a complex application can consume different resources, and parallel browser work changes the load. Treat capacity as something to measure on your own suite, not infer from a plan’s price.
- Record the browser version, test URL or case, outcome, screenshot artifact path, and elapsed time for each run.
- Observe VPS memory and CPU use while running the workload at the concurrency you intend to use.
- For a meaningful plan comparison, keep the pages, viewport, browser version, test count, and wait strategy the same. Compare completion time, failures, and peak memory.
- Estimate disk and transfer needs from your own test volume and artifact retention policy; the provider’s allowances are not a prediction of your workload’s consumption.
Troubleshoot common setup failures
Browser executable is missing
Likely cause: package-manager settings blocked install scripts, so Puppeteer did not download Chrome. Fix: run npx puppeteer browsers install, then rerun the test.
Rank #4
Chrome exits immediately or reports missing shared libraries
Likely cause: a runtime dependency is absent on the selected Linux image. Fix: inspect the browser binary with ldd chrome | grep not, install the missing distribution-appropriate packages, and retry. Confirm that your OS and architecture are supported for the Puppeteer/browser version in use.
Navigation times out or never reaches the chosen wait condition
Likely cause: the page is slow, unreachable from the VPS, or keeps network activity open. Fix: verify the URL can be reached from the server, inspect the navigation error, and select a readiness condition that matches the application. For pages with persistent connections or delayed content, waiting for a relevant selector may be more suitable than waiting for network idleness.
Screenshot is blank or missing expected content
Likely cause: the capture happened before the application rendered the content, or the artifact path’s parent directory does not exist. Fix: create the output directory first and wait for a page-specific ready element before capturing. Check the saved artifact and logs rather than treating a successful navigation alone as proof the page is ready.
Best Value
Repeated runs slow down or exhaust resources
Likely cause: browser processes are not being closed, or the test concurrency exceeds what the VM handles for these pages. Fix: close the browser in a finally block, inspect active processes and resource use, then reduce concurrency or move to a larger VM based on measured results.
Or skip the browser setup
If you need a screenshot endpoint instead of managing browser installation and capture code, ScreenshotNeo is a website screenshot API and MCP server for developers. A GET request can return a PNG, JPEG, WebP, or PDF. For example, this cURL call saves a WebP:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
See the ScreenshotNeo documentation for options and API details. It accepts cookie or consent banners like 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 or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers indicate the page verdict and billing status. Its MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients. The Free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000.
Recommended Free Tools
Sign up for ScreenshotNeo’s free plan to try 1,000 screenshots a month without a card.
Frequently Asked Questions
Does Puppeteer need a desktop environment on a VPS?
No. Puppeteer runs headless by default, so a graphical desktop is not required for ordinary screenshot captures.
Can I run screenshot tests on an ARM VPS?
Puppeteer’s current system-requirements page lists Debian/Ubuntu arm64 support for Chrome for Testing. Confirm support for the exact OS, architecture, and browser revision you plan to use.
Can I use Puppeteer for PDF output as well as screenshots?
Yes. Puppeteer’s page API includes PDF generation; consult the current API documentation for available options and behavior.
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 minuteQuick 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.

