October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix NowOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk6 min

How to Take Parallel Website Screenshots with Puppeteer Without Crashing Chrome

Use a bounded Puppeteer worker pool, isolate jobs with browser contexts when needed, and tune concurrency from real workload measurements—not a magic page count.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use a bounded worker pool: run only a measured number of screenshot jobs at once, give each job its own Puppeteer Page, and close pages in cleanup. If jobs must not share cookies or local storage, give them separate browser contexts. There is no documented universal safe concurrency limit; tune the pool on the machine and pages you actually use.

Why a bounded pool is safer than launching every URL at once

A single Puppeteer Browser can hold multiple Page instances, so you can process several URLs without launching a separate Chrome process for every job. But that describes an available design, not a guaranteed safe page count. Puppeteer’s official documentation does not establish a universal concurrency limit or a memory-per-page figure.

As an Amazon Associate I earn from qualifying purchases.

Each page can load a different mix of scripts, media, and layout, and take a different amount of time to navigate. Letting every URL start at once can therefore create a resource spike. A worker pool caps simultaneous jobs while leaving the rest queued. Set the cap by measuring your own workload, then adjust it gradually using memory, CPU, completion time, timeouts, and browser exits as signals.

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

Build a bounded screenshot worker pool

The following is a runnable Node.js example using Puppeteer. It starts one browser, processes URLs with a configurable concurrency cap, writes one PNG per URL, closes each page even when navigation or capture fails, and closes the browser when the batch ends. Install Puppeteer with npm install puppeteer; Puppeteer’s screenshots guide documents the capture method at https://pptr.dev/guides/screenshots.

#1 Best Overall
Philips 24 Inch Computer Monitor FHD 100Hz VA VESA Flicker-Free, 241V8LB | 1920×1080 LED Monitor, 4ms GtG, Adaptive Sync, HDMI 1.4, Tilt Adjust, Low Blue Light, 4yr Advance Replacement Warranty
  • CRISP CLARITY: This 23.8″ Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
  • INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
  • THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
  • WORK SEAMLESSLY: This sleek monitor is virtually bezel-free on three sides, so the screen looks even bigger for the viewer. This minimalistic design also allows for seamless multi-monitor setups that enhance your workflow and boost productivity
  • A BETTER READING EXPERIENCE: For busy office workers, EasyRead mode provides a more paper-like experience for when viewing lengthy documents
const puppeteer = require('puppeteer');
const path = require('node:path');

const urls = [
  'https://example.com',
  'https://developer.mozilla.org',
  'https://www.wikipedia.org',
];

// Start low, measure on your host, and raise this gradually.
const concurrency = 2;

async function runWithLimit(items, limit, worker) {
  let nextIndex = 0;
  const workerCount = Math.min(limit, items.length);

  await Promise.all(Array.from({ length: workerCount }, async () => {
    while (true) {
      const index = nextIndex++;
      if (index >= items.length) return;
      await worker(items[index], index);
    }
  }));
}

(async () => {
  if (!Number.isInteger(concurrency) || concurrency < 1) {
    throw new Error('concurrency must be a positive integer');
  }

  const browser = await puppeteer.launch();
  try {
    await runWithLimit(urls, concurrency, async (url, index) => {
      const page = await browser.newPage();
      try {
        await page.goto(url, { waitUntil: 'networkidle2', timeout: 60000 });
        const filename = path.join(process.cwd(), `screenshot-${index + 1}.png`);
        await page.screenshot({ path: filename, fullPage: true });
        console.log(`Saved ${filename}`);
      } catch (error) {
        console.error(`Failed ${url}:`, error.message);
      } finally {
        await page.close();
      }
    });
  } finally {
    await browser.close();
  }
})().catch(error => {
  console.error(error);
  process.exitCode = 1;
});

The pool’s limit is a starting control, not a promise that the chosen number will fit every host. The example catches per-URL errors so one failed page does not prevent the remaining queued URLs from running. In a production pipeline, also record each URL’s outcome and retry only failures that are safe to retry.

Choose the right isolation and cleanup boundary

Use separate pages when jobs can share browser state

browser.newPage() creates a page in the browser’s default context. Pages in the same context share its browser state, so this is appropriate only when sharing cookies and local storage is acceptable. Close the page in a finally block after each job.

Use browser contexts when jobs need separate storage

A BrowserContext isolates storage such as cookies and local storage. Create a context for each job or isolation group, create its page there, and close the created context in cleanup; closing a context also closes its pages. The default context cannot be closed, so do not treat it as a disposable per-job context. See the BrowserContext API reference.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Philips 22 Inch Computer Monitor FHD 100Hz VA VESA Flicker-Free, 221V8LB | 1920×1080 LED Monitor, 4ms GtG, Adaptive Sync, HDMI 1.4, Tilt Adjust, Low Blue Light, 4yr Advance Replacement Warranty
  • CRISP CLARITY: This 22 inch class (21.5″ viewable) Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
  • 100HZ FAST REFRESH RATE: 100Hz brings your favorite movies and video games to life. Stream, binge, and play effortlessly
  • SMOOTH ACTION WITH ADAPTIVE-SYNC: Adaptive-Sync technology ensures fluid action sequences and rapid response time. Every frame will be rendered smoothly with crystal clarity and without stutter
  • INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
  • THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
const context = await browser.createBrowserContext();
try {
  const page = await context.newPage();
  await page.goto('https://example.com', { waitUntil: 'networkidle2' });
  await page.screenshot({ path: 'isolated.png', fullPage: true });
} finally {
  await context.close(); // closes pages in this context too
}

Use the narrowest cleanup boundary that fits the job: close a page for page-level cleanup, close a created context to dispose of its pages and isolated state, and close the browser when a locally launched worker is finished.

Understand screenshot-time behavior and browser shutdown

Puppeteer’s screenshot API notes that while a screenshot is in progress in a BrowserContext, calls to newPage() and Page.close() wait for the screenshot to finish. bringToFront() does not wait for it. This behavior helps avoid interference from page creation and closure during capture, but it does not make unlimited concurrent navigation and screenshot jobs safe. See Page.screenshot API details.

For a browser that your script launched, call browser.close() when its worker is done; Puppeteer’s screenshot guide shows this lifecycle. browser.disconnect() is different: it detaches Puppeteer but leaves the browser and its pages open. That distinction matters when diagnosing leftover Chrome processes or when attaching to a browser managed elsewhere. See the browser management guide.

Rank #3
Dell 24 Monitor - SE2426H - 23.8-inch FHD (1920x1080) 144Hz 1ms Display, in-Plane Switching (IPS) Technology, AMD FreeSync™, TÜV 3-Star 2X HDMI, Tilt
  • Clear visuals. Fluid motion: A 144Hz refresh rate and 1ms MPRT deliver smooth, tear‑free motion across work, gaming, and streaming for clearer, more fluid viewing.
  • Eye comfort: TÜV Rheinland 3‑star* certification reduces harmful blue light while preserving stunning color quality without compromise. *TÜV Rheinland 3-star eye comfort certification.
  • Wide viewing angle: Get consistent views across a wide 178° /178° viewing angle.
  • In-Plane Switching (IPS): See excellent color accuracy and consistency across wide viewing angles with In-plane Switching (IPS) technology.
  • Ultra-thin bezels: Maximize your viewing experience with thin bezels.

Tune concurrency from measurements, not a magic number

  1. Start with a small cap. Run representative URLs rather than only lightweight test pages. Include the kinds of scripts, media, and layouts your real jobs encounter.
  2. Record outcomes. Track jobs completed per unit of time, navigation and screenshot duration, timeouts, browser exits, and host CPU and memory use.
  3. Raise the cap gradually. Change one setting at a time and compare runs on the same host and browser setup. Stop increasing it if resource pressure or failure rates rise.
  4. Back off or split the workload. If failures increase, reduce simultaneous work and check whether particular pages consistently consume more time or resources. Consider separate worker processes or browser instances only after measuring their operational overhead and recovery behavior.

The official Puppeteer documentation reviewed does not benchmark one browser with many pages against several browser processes. Throughput, stability, launch overhead, and recovery costs depend on the workload and deployment; measure them in your environment rather than assuming one topology is always faster.

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

Troubleshoot common parallel-capture failures

Chrome exits or the host becomes resource constrained

Reduce the worker limit and watch host memory and CPU during representative runs. Check whether the problem correlates with particular URLs or with the total number of active jobs. The documentation does not specify a safe page count or resource requirement, so a fixed recommendation would not be reliable.

Navigation times out

A page may take longer than the configured navigation timeout or may keep network activity open. Log the URL and the failing operation, then decide whether the page needs a different readiness condition or a deliberately longer timeout. A longer timeout can also leave a worker occupied longer, so account for that when tuning concurrency.

Rank #4
Sale
Samsung 27" Essential S3 (S36GD) Series FHD 1800R Curved Computer Monitor | 100Hz, Game Mode, Advanced Eye Comfort, HDMI and D-sub Ports (LS27D366GANXZA)
  • CURVED FOR ENHANCED ENGAGEMENT: An immersive viewing experience with a curved monitor that wraps more closely around your field of vision; It creates a wider view, enhancing depth perception and minimizing peripheral distraction
  • SMOOTH PERFORMANCE FOR SEAMLESS CONTENT: Stay in the action when playing games, watching videos, or working on creative projects; The 100Hz refresh rate reduces lag and motion blur so you don't miss a thing in fast-paced moments¹
  • MORE GAMING POWER: Gain the edge with optimizable game settings; Color and image contrast can be adjusted to see scenes more vividly and spot enemies hiding in the dark; Game Mode adjusts any game to fill the screen so you can view every detail²
  • KEEP IT EASY ON THE EYES: Care for your eyes and stay comfortable, even during long sessions; Advanced eye comfort technology certified by TÜV reduces eye strain by minimizing blue light and reducing irritating screen flicker²
  • INCREASED VERSATILITY: Connect to more; Plug devices straight into your monitor for increased flexibility, making your computing environment even more convenient

Pages see each other’s cookies or local storage

Pages created in the same context share that context’s state. Put jobs that require isolation in separate BrowserContexts and close each created context when its job or isolation group ends.

Chrome processes remain after a run

Ensure locally launched browsers reach browser.close() through a finally block. Do not substitute browser.disconnect() when your intent is to shut down the browser; disconnecting leaves it running.

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

Behavior changes after switching Chrome executables

Puppeteer says it is guaranteed to work only with its bundled browser; using another executable is at your own risk. Record both Puppeteer and browser versions in incident reports, and reproduce instability with the bundled browser before changing executable paths. See LaunchOptions for launch controls and the compatibility warning.

Best Value
Sale
Sceptre New 22-Inch Gaming Monitor, FHD 1080p, Up to 144Hz, HDMI, DisplayPort, Built-in Speakers, Machine Black (E225W-FW144 Series, 2026)
  • 【INTEGRATED SPEAKERS】Whether you're at work or in the midst of an intense gaming session, our built-in speakers provide rich and seamless audio, all while keeping your desk clutter-free.
  • 【EASY ON THE EYES】 Protect your eyes and enhance your comfort with Blue-Light Shift technology. This feature reduces harmful blue light emissions from your screen, helping to alleviate eye strain during long hours of use and promoting healthier viewing habits.
  • 【WIDEN YOUR PERSPECTIVE】Our sleek minimal bezel design ensures undivided attention. The nearly bezel-free display seamlessly connects in a dual monitor arrangement, delivering an unobstructed view that lets you focus on more at once, completely distraction-free.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup

ScreenshotNeo provides a website screenshot API and MCP server. Its API takes a URL in one GET request and can return PNG, JPEG, WebP, or PDF. For a single capture, the cURL request is:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp

See the ScreenshotNeo documentation for the API parameters. Cookie and consent banners are accepted and removed before capture, along with more than 60 known consent platforms, newsletter popups, and chat widgets; 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 identify the page verdict and billing status. Its MCP server gives AI agents tools for screenshots, page information, and PDF capture. The free plan includes 1,000 shots a month with no card; paid plans start at $5 for 3,000 shots.

Sign up for ScreenshotNeo’s free plan to get 1,000 screenshots a month with no card.

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

Frequently Asked Questions

Can I take parallel screenshots with one Puppeteer browser?

Yes. One Browser can have multiple Page instances, but the safe concurrency depends on your workload and host; measure it rather than assuming a universal limit.

Does Puppeteer publish a safe number of pages to run at once?

The official documentation covered here does not give a universal concurrency limit or per-page memory figure.

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
PC Slower Than It Used to Be?Free scan - under a minute
Crashes, No Sound, or Screen Glitches?Free driver scan

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.