Recommended Free Tools
Use Node.js to parse the CSV with a real CSV library, then loop through its URL rows with Playwright: navigate to each page and save a screenshot. The example below expects a url header, saves full-page PNGs, and logs individual failures without stopping the rest of the batch.
Prepare the CSV and install the dependencies
Use a header named url, with one URL per row. Quoted fields and blank lines are handled by the CSV parser rather than by splitting lines on commas.
url
https://example.com
https://playwright.dev
Playwright’s parameterization guide notes that Node.js scripts can read local files and parse them with a preferred CSV library. Its example uses csv-parse/sync with header columns and skipped empty lines: Playwright: Parameterize tests.
Create a Node.js project, install Playwright and the parser, and install the Chromium browser:
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →#1 Best Overall
- PORTABLE SCANNER FOR USE ON-THE-GO — The fastest and lightest mobile single-sheet-fed compact document scanner in its class¹
- QUICK DOCUMENT SCANNING ― This Epson ultra-fast scanner scans a single page as quickly as 5.5 seconds²; Windows and Mac compatible
- VERSATILE PAPER HANDLING ― Portable scanner scans documents up to 8.5 x 72 in; Also easily digitizes receipts and ID cards to make accounting, bookkeeping, and organizing simpler
- INTUITIVE, HIGH-SPEED SOFTWARE — Epson ScanSmart Software³ is a smart tool allowing you to easily scan, review, and save; Stay organized easily with the help of this Epson scanner
- EASY SETUP — USB-powered connect to your computer for quick and simple scanning; No batteries or external power supply required to operate portable document scanner; Standard Connectivity: USB 2.0
npm init -y
npm install playwright csv-parse
npx playwright install chromium
To use the ES module imports below, set "type": "module" in package.json, or save the script with an .mjs extension.
Run a CSV-to-screenshots script
Save this as capture.js (or capture.mjs) beside urls.csv. It creates the output directory, names files by CSV row order, captures the full scrollable page, and continues after individual navigation or screenshot errors.
import fs from 'node:fs';
import path from 'node:path';
import { parse } from 'csv-parse/sync';
import { chromium } from 'playwright';
const inputPath = 'urls.csv';
const outputDir = 'screenshots';
const rows = parse(fs.readFileSync(inputPath), {
columns: true,
skip_empty_lines: true,
});
fs.mkdirSync(outputDir, { recursive: true });
const browser = await chromium.launch();
const failures = [];
try {
const page = await browser.newPage();
for (const [index, row] of rows.entries()) {
const url = row.url?.trim();
if (!url) {
failures.push({ row: index + 2, url: '', error: 'Missing url value' });
continue;
}
const filename = `page-${String(index + 1).padStart(4, '0')}.png`;
const outputPath = path.join(outputDir, filename);
try {
await page.goto(url, { waitUntil: 'load', timeout: 30000 });
await page.screenshot({ path: outputPath, fullPage: true });
console.log(`Saved ${outputPath} for ${url}`);
} catch (error) {
failures.push({ row: index + 2, url, error: error.message });
console.error(`Failed CSV row ${index + 2} (${url}): ${error.message}`);
}
}
} finally {
await browser.close();
}
if (failures.length) {
fs.writeFileSync('screenshots-failures.json', JSON.stringify(failures, null, 2));
console.error(`${failures.length} row(s) failed; see screenshots-failures.json`);
}
Run it with node capture.js. Since the CSV has a header, its first data record is row 2 in the file; the script reports that physical row number for easier correction. The output filename uses the record’s sequence number, avoiding collisions when two rows point to the same host. If you prefer names that include hostnames, sanitize them and retain the row number to keep repeated hosts distinct.
Rank #2
- FAST SPEEDS - Scans color and black and white documents a blazing speed up to 16ppm (1). Color scanning won’t slow you down as the color scan speed is the same as the black and white scan speed.
- ULTRA COMPACT – At less than 1 foot in length and only about 1. 5lbs in weight you can fit this device virtually anywhere (a bag, a purse, even a pocket).
- READY WHENEVER YOU ARE – The DS-640 mobile scanner is powered via an included micro USB 3. 0 cable allowing you to use it even where there is no outlet available. Plug it into you PC or laptop and you are ready to scan.
- WORKS YOUR WAY – Use the Brother free iPrint&Scan desktop app for scanning to multiple “Scan-to” destinations like PC, Network, cloud services, Email and OCR. (2) Supports Windows, Mac and Linux and TWAIN/WIA for PC/ICA for Mac/SANE drivers. (3)
- OPTIMIZE IMAGES AND TEXT – Automatic color detection/adjustment, image rotation (PC only), bleed through prevention/background removal, text enhancement, color drop to enhance scans. Software suite includes document management and OCR software. (4)
Choose what to capture and when
Viewport or full page
By default, page.screenshot() captures the current viewport. Set fullPage: true to capture the full scrollable page; remove that property for viewport-only images. See the Playwright Page API.
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 minutePage readiness
waitUntil: 'load' waits for the page’s load event, but it cannot guarantee that every site has finished rendering content loaded later by scripts. If a site’s important content appears asynchronously, wait for a known selector or other site-specific readiness signal before taking the screenshot. There is no universal wait condition that proves every page is visually complete.
For example, replace the navigation-and-capture lines with a selector wait when a known element indicates the content is ready:
Rank #3
- STAY ORGANIZED – Easily convert your paper documents into digital formats like searchable PDF files, JPEGs, and more.Power Consumption : 2.5W or less (Energy Saving Mode: 0.7W). Suggested Daily Volume : 500 scans..Does it contain liquid: no
- CONVENIENT AND PORTABLE –lightweight and small in size, you can take the scanner anywhere from home offices, classrooms, remote offices, and anywhere in between
- HANDLES VARIOUS MEDIA TYPES – Digitize receipts, business cards, plastic or embossed cards, reports, legal documents, and more
- FAST AND EFFICIENT – No technical hurdles or complicated setups here; easily scan both sides of a document at the same time, in color or black-and-white, at up to 12 pages-per-minute, and with a 20 sheet automatic feeder
- BROAD COMPATIBILITY – Works with both Windows and Mac devices, be it laptop or computer
await page.goto(url, { waitUntil: 'load', timeout: 30000 });
await page.locator('[data-page-ready="true"]').waitFor({ timeout: 10000 });
await page.screenshot({ path: outputPath, fullPage: true });
Change the selector to one that actually exists on the target site; a selector that never appears will time out and be recorded as a row failure.
Adapt the batch for your workload
Reuse one page or create a page per URL
The example reuses one page to keep the loop simple. A fresh page for each URL can provide stronger per-navigation isolation, but requires closing each page after its capture. Neither approach is prescribed for this batch use case; choose based on whether state carried between navigations matters for your sites.
Free tools Windows power users keep installed
One-click scans. No signup required.
Sequential or concurrent captures
This script is sequential: it visits and saves one URL before moving to the next. That makes failures easier to associate with rows and avoids opening many pages at once. Concurrency can improve throughput in some workloads, but raises resource use and may trigger site-side rate limits. Start sequentially; add bounded concurrency only after checking resource and target-site constraints.
Rank #4
- IRIScan Express, portable scanner : scans color and black and white documents a blazing speed up to 8ppm simplex. Color scanning won’t slow you down as the color scan speed is the same as the black and white scan speed.
- IRIScan Express mobile scanner is powered via an included micro USB 2. 0 cable allowing you to use it even where there is no outlet available. Plug it into you PC or laptop and you are ready to scan. USB cable provided. AC Adapter not provided and not needed.
- IRIScan flatbed scanner uses a simplex scanning mode allows for quick and straightforward scanning of single-sided documents. IRIScan with its full portable features is the ideal document scanners for computers.
- IRIScan document scanner : Versatile scanning capabilities, including scanning to Word, PDF, and Excel formats with companion software provided Readiris OCR
- Receipt scanner and card scanner with Additional features include scanning business cards directly to Outlook, photo scanning, and receipt scanning for efficient document management
Standalone script or Playwright Test
A standalone Node.js script is a direct fit for a one-off or scheduled CSV batch. Playwright Test is useful when the capture belongs in a test suite or when you need its test-runner workflow; the CSV parameterization guide demonstrates reading input in that context. The capture itself uses the same browser navigation and screenshot APIs.
Record results for downstream review
The example writes a failure JSON file but not a success manifest. If another process needs to match screenshots to source records, write a manifest row for each URL containing its CSV row number, URL, output path, and status. Keep failures separate from successful output so a missing image is not mistaken for an empty page.
Troubleshoot common failures
- CSV parser reports a malformed record: Check quoting, delimiters, and row structure in the input. Do not switch to comma-splitting; commas can legitimately occur inside quoted CSV fields.
- Every URL is skipped or reported missing: Confirm the header is spelled exactly
url. Header matching is the parser’s column mapping, and a differently named column will not populaterow.url. - Navigation times out: The URL may be unreachable from the machine, slow, blocked, or redirecting through a problematic flow. Check the URL in the same environment, then adjust the timeout or navigation readiness condition for that site. A longer timeout does not fix an invalid address.
- Screenshot appears incomplete: The page may render important content after the load event. Wait for a page-specific selector or readiness signal before capture; full-page mode changes the captured area, not when dynamic content is ready.
- Browser executable is missing: Install the browser corresponding to the Playwright package with
npx playwright install chromium. If you use a different browser, install and launch that browser explicitly. - Images vary between runs or machines: Rendering can differ with operating system, browser version, settings, hardware, power source, and headless mode. Playwright recommends using the same environment for visual comparisons: Playwright: Visual comparisons.
- Later rows stop after one failure: Keep navigation and screenshot work inside the per-row
try/catch; errors outside it, such as an unreadable CSV or browser launch failure, should stop the job because the batch cannot proceed reliably.
Or skip the browser setup
If you want the CSV loop but not local browser installation and screenshot handling, call ScreenshotNeo once per URL. Replace the example URL with the current CSV value and supply your API key. See the ScreenshotNeo API documentation for request options.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Best Value
- Scanner type: Document
- Connectivity technology: USB
- With Auto Scan Mode, the scanner automatically detects what you're scanning
- Digitize documents and images
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
ScreenshotNeo accepts cookie or consent banners like a visitor and removes known consent platforms, newsletter popups, and chat widgets before capture; those steps can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, with response headers indicating the page verdict and billing status. An MCP server provides screenshot and page-information tools for AI agents. The free plan includes 1,000 screenshots per month without a card; paid plans start at $5 for 3,000 shots.
Sign up free for 1,000 screenshots a month, with no card required.
Cost, reliability, and repeatability
A local Playwright batch has no per-screenshot API charge described here, but it uses your machine’s compute and requires browser installation and maintenance. Sequential processing is predictable but takes one navigation at a time; raising concurrency trades simplicity for more resource use and possible rate limiting. The script’s timeout and failure log make incomplete runs visible rather than silently treating every row as successful.
For repeatable visual baselines, keep the operating system, Playwright/browser version, settings, hardware conditions, and headless mode consistent. A screenshot is a rendering result, so changing the environment can change pixels even if the URL is unchanged.
Frequently Asked Questions
Can I use a CSV with a different URL column name?
Yes. Change `row.url` in the script to the property corresponding to your CSV header.
Does this script capture a PDF?
No. It saves PNG screenshots; PDF output requires a different capture workflow.
Can I rerun the script without overwriting earlier screenshots?
The numbered PNGs are overwritten on rerun. Use a timestamped output directory or include a run identifier in filenames if you need to preserve prior batches.
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.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problems

