Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Repair Windows errors before they cause bigger problems3Fix the driver behind crashes, sound loss and screen glitchesTo bulk screenshot URLs through a proxy in Puppeteer, launch Chromium with a proxy argument, then process a validated URL list through a bounded queue. For each URL, navigate with a timeout, save a uniquely named image, record the result, and close the browser in a finally block. Puppeteer provides the single-page capture operation, Page.screenshot(); the batch loop, output manifest, retry policy, and concurrency limits are your application’s responsibility. This guide uses Node.js and Puppeteer’s documented API, whose pages displayed version 25.12.0 when retrieved. Pin a version compatible with your project rather than assuming that version is required.
Install Puppeteer and prepare a URL list
Install Puppeteer in your Node.js project and confirm its browser can launch in the environment where the job will run. Puppeteer’s official overview demonstrates the basic launch-and-navigation model. Keep the dependency version pinned in your project lockfile so batch behavior is reproducible; the documentation version displayed at retrieval was 25.12.0, not a recommendation to upgrade blindly.
As an Amazon Associate I earn from qualifying purchases.
Put one target URL per line in urls.txt. Validate each entry before opening a page: accept only the protocols you intend to capture, reject malformed URLs, and avoid passing arbitrary unsupported schemes such as file: unless your application explicitly needs them. Treat the list as input, not as trusted data.
Crashes, 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 minuteWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallUse a collision-resistant filename rather than the hostname or URL path alone. Different URLs can share paths, contain characters unsuitable for filenames, or redirect to the same destination. The example below uses the URL’s SHA-256 digest, so distinct input URLs will not overwrite each other under ordinary conditions.
#1 Best Overall
- 【WIRELESS MOBILE MINI TRAVEL ROUTER】 Convert a public network (wired or wireless) to a private Wi-Fi for secure surfing. Tethering. Powered by any laptop USB, power banks or 5V/2A DC adapters (sold separately). 39g (1.41 Oz) only, portable and pocket friendly. 2.4GHz ONLY
- 【OPEN SOURCE & PROGRAMMABLE】 OpenWrt pre-installed, USB disk extendable.
- 【LARGER STORAGE & EXTENDABILITY】 128MB RAM, 16MB Flash ROM, dual Ethernet ports, UART and GPIOs available for hardware DIY.
- 【OPENVPN CLIENT】 OpenVPN client pre-installed, compatible with 30+ VPN service providers.
- 【PACKAGE CONTENTS】 GL-MT300N-V2 (Mango) mini router (2-year Warranty), USB cable, Ethernet cable, User Manual. Please update to the latest firmware.
Configure the proxy for browser traffic
Pass Chromium’s --proxy-server argument at launch for a browser-wide proxy route. Puppeteer launch options accept additional browser arguments, and the third-party proxy guide shows this pattern. Proxy schemes, authentication behavior, and provider requirements vary, so test with the exact proxy, browser build, and Puppeteer version you will deploy.
Do not confuse proxy settings used to download or configure Puppeteer with the route used for page requests. Puppeteer’s configuration guide documents HTTP_PROXY, HTTPS_PROXY, and NO_PROXY as environment-only configuration settings and notes that puppeteer-core ignores Puppeteer configuration and environment variables. For target-page traffic, configure the browser route deliberately and verify the observed egress address with a test endpoint you are authorized to use.
Keep proxy credentials out of source code, command history, and logs. Supply the proxy URL from a protected environment variable or secret manager, and check how your selected authentication method works with the selected proxy scheme. Do not assume a third-party helper package is compatible with your current Puppeteer version; the cited proxy guide notes compatibility and performance caveats for such helpers.
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Rank #2
- 【Advanced Home Data & Media Hub】For advanced home users who need phone backup, file storage, and centralized data management. Centralize family photos, 4K videos, movies, computer backups, and personal files in one place while running multiple apps for home entertainment and everyday data management. Suitable for households with growing digital libraries and multiple NAS use cases.
- 【Built for Creators, Media Servers & Advanced Apps】Powered by the Intel N100 Quad-Core CPU, 8GB DDR5 RAM, 2.5GbE networking, and dual M.2 NVMe slots, DXP2800 handles large files and heavier workloads with ease. Run Docker, virtual machines, and media server applications compatible with Plex—ideal for content creators, tech enthusiasts, and advanced home users managing 4K videos, RAW photos, personal media libraries, and multiple NAS apps.
- 【Up to 80TB for Growing Digital Libraries】 Supports up to 80TB of storage using two HDD bays and two M.2 NVMe SSD slots for family photos, movies, RAW photos, 4K videos, work files, and device backups. AI photo management supports recognition of people, objects, scenes, and locations, album organization, and duplicate photo detection. HDDs and SSDs are not included.
- 【AI-powered Home Surveillance】Turn DXP2800 into a centralized home surveillance hub by connecting compatible network cameras and storing recordings locally on your NAS. AI-powered features include Face Recognition, People Detection, and Pet Detection, helping advanced home users review important events more efficiently while managing home surveillance and personal data in one place.
- 【One data Center Across Your Devices】Keep files from desktops, laptops, phones, tablets, and other devices together instead of scattered across cloud accounts and external drives. Access, back up, organize, and share data across Windows, macOS, Android, iOS, web browsers, and compatible smart TVs—ideal for creators and advanced home users working across multiple devices.
Run a bulk screenshot job
The following script is a runnable starting point for a Node.js project with Puppeteer installed. It reads urls.txt, rejects malformed or non-HTTP(S) entries, applies bounded concurrency, saves PNG screenshots under shots/, and writes a JSON manifest with the requested URL, final URL, output path, HTTP status when available, and any error. It continues after an individual failure and always closes the browser.
Set PROXY_SERVER to the proxy address expected by your provider, such as a scheme-and-host URL. If the proxy requires credentials, use the authentication mechanism supported by that provider and test it independently before running a batch; do not put credentials in the URL if that would expose them through logs or process inspection.
const puppeteer = require('puppeteer');
const fs = require('node:fs/promises');
const path = require('node:path');
const crypto = require('node:crypto');
const CONCURRENCY = Number(process.env.CONCURRENCY || 2);
const NAVIGATION_TIMEOUT_MS = Number(process.env.NAVIGATION_TIMEOUT_MS || 30000);
const OUTPUT_DIR = path.resolve('shots');
const PROXY_SERVER = process.env.PROXY_SERVER;
if (!Number.isInteger(CONCURRENCY) || CONCURRENCY < 1) {
throw new Error('CONCURRENCY must be a positive integer');
}
function parseUrl(line, lineNumber) {
const value = line.trim();
if (!value || value.startsWith('#')) return null;
let url;
try {
url = new URL(value);
} catch {
throw new Error(`Invalid URL on line ${lineNumber}: ${value}`);
}
if (!['http:', 'https:'].includes(url.protocol)) {
throw new Error(`Unsupported protocol on line ${lineNumber}: ${url.protocol}`);
}
return url.href;
}
function outputName(url) {
const digest = crypto.createHash('sha256').update(url).digest('hex');
return `${digest}.png`;
}
async function main() {
const lines = (await fs.readFile('urls.txt', 'utf8')).split(/r?n/);
const urls = lines.map(parseUrl).filter(Boolean);
await fs.mkdir(OUTPUT_DIR, { recursive: true });
const args = [];
if (PROXY_SERVER) args.push(`--proxy-server=${PROXY_SERVER}`);
const browser = await puppeteer.launch({ args });
const results = new Array(urls.length);
let nextIndex = 0;
async function worker() {
while (true) {
const index = nextIndex++;
if (index >= urls.length) return;
const requestedUrl = urls[index];
const file = path.join(OUTPUT_DIR, outputName(requestedUrl));
let page;
try {
page = await browser.newPage();
page.setDefaultNavigationTimeout(NAVIGATION_TIMEOUT_MS);
const response = await page.goto(requestedUrl, { waitUntil: 'networkidle2' });
await page.screenshot({ path: file, type: 'png', fullPage: false });
results[index] = {
requestedUrl,
finalUrl: page.url(),
outputPath: file,
httpStatus: response ? response.status() : null,
ok: true
};
} catch (error) {
results[index] = {
requestedUrl,
finalUrl: page ? page.url() : null,
outputPath: file,
ok: false,
error: error.message
};
} finally {
if (page) await page.close().catch(() => {});
}
}
}
try {
await Promise.all(Array.from({ length: Math.min(CONCURRENCY, urls.length) }, worker));
await fs.writeFile('manifest.json', JSON.stringify(results, null, 2));
const failed = results.filter((result) => !result.ok).length;
console.log(`Finished ${results.length} URLs; ${failed} failed. See manifest.json.`);
} finally {
await browser.close();
}
}
main().catch((error) => {
console.error(error);
process.exitCode = 1;
});
Save the script as capture.js, then run it with your proxy configured in the environment:
Rank #3
- One Place for All Your Data - Consolidate scattered files from multiple computers, phones and external drives into one accessible hub with 100% ownership
- Professional File Collaboration - Share projects with clients, sync documents across teams and maintain version control without Dropbox fees
- Automated Backup Protection - Set-and-forget backups for Macs, PCs and mobile devices to multiple destinations including cloud and external drives
- DIY Surveillance System - Transform IP cameras into a professional monitoring solution with motion alerts, recording schedules and remote viewing
- 2-Year Warranty - Reliable hardware backed by Synology's expert customer support team and ongoing software updates
PROXY_SERVER='http://proxy-host:port' CONCURRENCY=2 node capture.js
The example creates a new page for each URL, which avoids carrying page state from one target to the next. It does not create a fresh browser context for each URL; cookies and other context-level state may therefore be shared. If targets must be isolated from one another, create separate browser contexts according to your Puppeteer version’s API and close each context after its capture. If URLs intentionally share a session, use a shared context and manage cookies explicitly.
Free tools Windows power users keep installed
One-click scans. No signup required.
Choose capture settings for the job
Puppeteer’s ScreenshotOptions define the capture behavior. Choose options based on the output you actually need:
- Viewport or full page:
fullPagedefaults tofalse. Usetruewhen the whole document is required; a full-page image can be much taller and larger than a viewport capture. - Image type: PNG is a lossless default. The options also support other screenshot types; choose a lossy format only when smaller files matter more than exact pixel fidelity. The
qualityoption does not apply to PNG. - Viewport and scale: set a consistent viewport when comparing pages. Screenshot options include
clipfor a defined capture rectangle, and page configuration can control the viewport dimensions and device scale. - Background: use the documented background handling option when transparency or a specific background treatment matters; confirm that the selected image format supports the result you expect.
- Path: set a unique output
pathfor file output. Do not derive it directly from unsanitized URL text.
For pages with lazy-loaded content, networkidle2 is only one possible navigation wait condition; it does not guarantee every image or script has finished loading. Use an explicit selector wait, a bounded delay, or application-specific readiness check when the target page requires it, and keep a timeout so one slow site cannot stall the batch indefinitely.
Rank #4
- Unlimited bandwidth, unlimited data.
- Super-fast VPN and one tap connect.
- Free worldwide multiple servers.
- Works with all type of data carries. (Wi-Fi, 4G, LTE, 3G).
- No registration, sign up needed.
Set concurrency and failure policy deliberately
Puppeteer does not publish a universal safe concurrency number for bulk screenshot jobs. Start with a low bounded value, then tune it against page weight, proxy capacity, target-site behavior, and available memory. Raising concurrency can reduce elapsed time, but it also increases simultaneous browser work and load on the proxy and target sites. Measure your own workload rather than relying on a generic pages-per-minute claim.
Decide how the job should respond to transient failures. A practical policy is to record every outcome, continue after an individual URL fails, and retry only a small bounded number of times for errors you classify as transient. Avoid indefinite retries: they can prolong a batch, duplicate traffic, or aggravate a target or proxy problem. Preserve partial output and the manifest even when some URLs fail.
Consider site terms, authorization, robots or access restrictions where applicable, and your proxy provider’s rules. A proxy changes the route for requests; it does not grant permission to access a site or bypass its controls.
Best Value
- Complete Phone & Computer Backup - Automatically protect photos, documents and videos from iPhone android, Mac and Windows to one secure location
- Your Private File Cloud - Access files from anywhere and share large projects with family or clients without relying on expensive cloud subscriptions
- Smart Home Security Hub - Monitor your home 24/7 with AI-powered surveillance that detects people, vehicles and sends instant alerts
- 100% Data Ownership - Keep full control of your personal data with multi-platform access and no monthly subscription fees
- 2-Year Warranty - Reliable hardware backed by Synology's expert customer support team and ongoing software updates
Common problems and fixes
- Chromium does not launch: confirm Puppeteer’s browser is installed and compatible with the runtime, and check any system-library or sandbox requirements of the host. Test a minimal launch before adding proxy configuration.
- Requests appear to bypass the proxy: verify that the argument is passed to the browser launch that created the page, that the proxy URL and scheme are correct, and that an authorized egress test reports the expected route. Environment variables used for Puppeteer configuration are not a substitute for configuring page traffic.
- Proxy authentication fails: confirm the provider’s required authentication method and whether it supports the proxy scheme and browser build in use. Test one page before scaling the batch; keep secrets out of output and logs.
- Navigation times out: the target may be slow, blocked, or waiting on long-lived network activity. Increase the timeout only when justified, choose a suitable wait condition, or add a page-specific readiness check. Keep timeouts bounded.
- The screenshot is blank or incomplete: verify that navigation reached the expected final URL and that the page had time to render. Wait for a relevant selector or use an appropriate readiness condition; check the manifest and page errors rather than blindly retrying.
- Some images or lower-page content are missing: lazy-loaded content may not appear until scrolled into view. Use full-page capture or deliberately scroll and wait for the needed content before capturing, while accounting for larger output and longer processing.
- Files overwrite one another: use a digest or another collision-resistant name derived from the full input URL, as in the example. Keep the URL-to-file mapping in the manifest.
- Memory use grows or the proxy struggles: reduce concurrency, close pages promptly, and review whether full-page captures are necessary. There is no documented one-size-fits-all concurrency ceiling.
Or skip the browser setup
ScreenshotNeo offers a screenshot API and MCP server for developers. A single GET request can return a screenshot or PDF, and the API accepts common parameter names used by other screenshot APIs. For a batch, call it once per URL from your own queue and preserve the same manifest-and-error-handling approach. See the API documentation for request options.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Before capture, ScreenshotNeo accepts the cookie or consent banner like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each of those steps can be turned off. Bot checks and CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and each response indicates the page verdict and billing status in headers. Its MCP server gives AI agents such as Claude and Cursor tools to take screenshots, inspect page information, and capture PDFs. The Free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots. Every feature is on every plan.
Sign up for ScreenshotNeo’s free plan to get 1,000 screenshots a month with no card.
Frequently Asked Questions
Does Puppeteer include a built-in bulk screenshot command?
No. The documented operation is Page.screenshot(); a loop or queue around it handles the batch.
Can I use a proxy only for selected URLs in one batch?
The --proxy-server launch argument configures browser-wide routing. Routing different URLs through different proxies requires a design that configures separate browser instances or another explicitly supported routing setup.
Where can I see which Puppeteer screenshot options are available?
See the ScreenshotOptions API reference for the documented options.
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.
Recommended Free Tools




