Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Repair Windows errors before they cause bigger problems3Scan for outdated or missing drivers - takes under a minuteUse a browser automation loop to read each URL from a CSV, capture it with Playwright, and save the result under a stable row-based filename. Keep a manifest of successes and failures so every image in your report can be traced to its source. The example below captures full-page PNGs; you can switch to viewport-only shots or another supported format when that better suits the report.
Prepare the CSV and output folders
Use a header row named url, with one absolute website URL per row. An optional id column gives each capture a readable, stable filename. Save the CSV as urls.csv and create an output folder such as screenshots.
As an Amazon Associate I earn from qualifying purchases.
id,url
001,https://example.com/
002,https://playwright.dev/
The CSV parser in the script below handles quoted fields, commas inside quoted values, and escaped quote characters. Blank lines and rows without a URL are skipped. Keep IDs short and unique; when an ID is absent, the script uses the row number.
Install Playwright and run a CSV capture loop
Playwright’s documented browser workflow is to navigate to a URL and save a screenshot. Its page screenshot API also supports full-page output and other capture options. See Playwright Screenshots and the Playwright Page API for the relevant documented primitives.
#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
-
Install Node.js, then in a new project directory run
npm init -y. -
Install Playwright with
npm install playwright, then install its Chromium browser withnpx playwright install chromium. -
Save the CSV above as
urls.csvand createcapture.jswith the script below.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 →Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.Rank #2
SaleBrother DS-640 Compact Mobile Document Scanner, (Model: DS640)- 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)
-
Run
node capture.js. The script writes image files toscreenshots/and amanifest.csvwith the source URL, output filename, status, and error if a capture fails.
const fs = require('node:fs/promises');
const path = require('node:path');
const { chromium } = require('playwright');
function parseCsv(text) {
const rows = [];
let row = [];
let field = '';
let quoted = false;
for (let i = 0; i < text.length; i++) {
const ch = text[i];
if (quoted) {
if (ch === '"' && text[i + 1] === '"') {
field += '"';
i++;
} else if (ch === '"') {
quoted = false;
} else {
field += ch;
}
} else if (ch === '"' && field === '') {
quoted = true;
} else if (ch === ',') {
row.push(field);
field = '';
} else if (ch === 'n' || ch === 'r') {
if (ch === 'r' && text[i + 1] === 'n') i++;
row.push(field);
if (row.some((value) => value.trim() !== '')) rows.push(row);
row = [];
field = '';
} else {
field += ch;
}
}
row.push(field);
if (row.some((value) => value.trim() !== '')) rows.push(row);
return rows;
}
function safeName(value) {
return value.trim().replace(/[^a-zA-Z0-9_-]+/g, '-').replace(/^-+|-+$/g, '') || 'page';
}
function csvCell(value) {
const text = String(value ?? '');
return `"${text.replace(/"/g, '""')}"`;
}
(async () => {
const inputPath = path.resolve('urls.csv');
const outputDir = path.resolve('screenshots');
await fs.mkdir(outputDir, { recursive: true });
const rows = parseCsv(await fs.readFile(inputPath, 'utf8'));
if (!rows.length) throw new Error('CSV is empty');
const headers = rows[0].map((value) => value.trim().toLowerCase());
const urlIndex = headers.indexOf('url');
const idIndex = headers.indexOf('id');
if (urlIndex < 0) throw new Error('CSV must have a url header');
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage({ viewport: { width: 1440, height: 900 } });
const manifest = [['row', 'id', 'url', 'file', 'status', 'error']];
try {
for (let i = 1; i < rows.length; i++) {
const values = rows[i];
const url = (values[urlIndex] || '').trim();
if (!url) continue;
const rawId = idIndex >= 0 ? (values[idIndex] || '').trim() : '';
const id = safeName(rawId || String(i).padStart(3, '0'));
const file = `${id}-screenshot.png`;
try {
const parsed = new URL(url);
if (!['http:', 'https:'].includes(parsed.protocol)) throw new Error('URL must use http or https');
const response = await page.goto(parsed.href, { waitUntil: 'load', timeout: 45000 });
if (!response) throw new Error('Navigation returned no HTTP response');
await page.screenshot({ path: path.join(outputDir, file), fullPage: true, type: 'png' });
manifest.push([i + 1, id, url, file, `captured (HTTP ${response.status()})`, '']);
} catch (error) {
manifest.push([i + 1, id, url, '', 'failed', error.message]);
}
}
} finally {
await browser.close();
}
const manifestText = manifest.map((row) => row.map(csvCell).join(',')).join('n') + 'n';
await fs.writeFile('manifest.csv', manifestText, 'utf8');
console.log(`Finished. Review manifest.csv; images are in ${outputDir}`);
})();
Choose viewport-only or full-page shots
The script uses fullPage: true to capture the page’s full scrollable height. Set it to false for just the current 1440 × 900 viewport. A full-page screenshot can be very tall, and some pages render content only as it approaches the viewport; if lower sections or lazy-loaded images are missing, capture after scrolling through the page or use an explicit wait suited to that site.
Keep output names and report references stable
The ID column makes filenames predictable, for example 001-screenshot.png. If IDs repeat, the script can overwrite an earlier image, so make IDs unique or adapt the naming logic to include the CSV row number. Include both the filename and original URL in the report or manifest; filenames alone do not identify what was captured.
Rank #3
- FAST DOCUMENT SCANNING — Document scanner with feeder allows you to speed through stacks with a 50-sheet Auto Document Feeder (ADF); Efficient office scanner to help you scan more productively
- INTUITIVE, HIGH-SPEED SOFTWARE — Quickly scan with this desktop document scanner; Epson ScanSmart Software lets you easily preview scans, email files, upload to the cloud, and more; Plus, automatic file naming saves even more time
- SEAMLESS INTEGRATION — Easily incorporate your data into most document management software with the included TWAIN driver; Office document scanner integrates seamlessly with business workflows
- EASY SHARING — Duplex scanner allows you to scan straight to email or popular cloud storage2 services like Dropbox, Evernote, Google Drive, and OneDrive for simple storage and sharing
- SIMPLE FILE MANAGEMENT — Scanner allows the creation of searchable PDFs with Optical Character Recognition (OCR) and convert scans to editable Word or Excel files effortlessly; Designed for home and office document scanning
Adapt output and capture settings to the report
Playwright’s screenshot API documents full-page, element and page screenshots, along with image output options. The Playwright CLI’s screenshot documentation also covers custom filenames, PNG/JPEG/WebP, full-page capture, high-resolution output and PDF export: Playwright CLI.
Free tools Windows power users keep installed
One-click scans. No signup required.
- Format: PNG is a practical choice for crisp interface details; JPEG or WebP can reduce file size depending on content and use. Change the screenshot type and extension together.
- Resolution: Set the viewport to the same dimensions for every row to keep comparisons consistent. For high-resolution evidence, the CLI documents a high-resolution mode based on device pixels.
- PDF report: If the deliverable is a PDF rather than a set of images, the CLI provides PDF export options. Check its current documentation for the exact command-line flags and output behavior.
- Target element: If the report needs a particular panel rather than an entire page, use Playwright’s element screenshot capability instead of a full-page capture.
Record failures and make the run auditable
The manifest distinguishes a failed capture from a successful screenshot and records the HTTP status when navigation returns a response. An HTTP error status does not always mean the page failed to render, so inspect the image and status together rather than treating every non-2xx response as a browser failure. The script records navigation and screenshot exceptions; it does not retry automatically.
For a large batch, consider adding a retry policy for transient navigation failures and writing the manifest incrementally so progress survives an interrupted run. Run a small sample first to confirm the viewport, full-page behavior, and filename pattern before capturing the entire CSV.
Rank #4
- Scanner type: Document
- Connectivity technology: USB
- With Auto Scan Mode, the scanner automatically detects what you're scanning
- Digitize documents and images
Troubleshoot common problems
- “CSV must have a url header”: Check that the first row has a column named
url. Header matching ignores case and surrounding spaces, but not a different name such aswebsite. - Browser executable missing: Run
npx playwright install chromiumafter installing the package. - Navigation timeout: The page may be slow, blocked, or waiting on resources. Confirm the URL works from the same machine; increase the
timeoutcautiously or choose a less strict navigation wait condition for the target sites. - Image missing despite a successful row: Check the output directory and manifest filename, and verify that the page did not return a challenge, interstitial or blank state. A successful browser navigation is not proof that the intended content was present.
- Content or images absent lower down: The site may lazy-load content as it enters the viewport. Try scrolling through the page before capture, or wait for a known content selector to appear.
- Duplicate files: Duplicate IDs map to the same filename and can overwrite. Use unique IDs or include the row number in every filename.
- Very large images or slow batches: Full-page images can be much larger than viewport shots. Use viewport capture when the report does not need the entire page, and process an exceptionally large CSV in manageable runs.
Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server. A single GET request can capture a URL as an image or PDF; for CSV workflows, call it once per row and save each response under your row-based filename. The API also supports bulk capture of up to 100 URLs per call.
Example for one CSV row, adapting the target URL and output filename as needed:
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com/ -o 001-example-homepage.webp
See the ScreenshotNeo API documentation for authentication and request options. Cookie banners are accepted before capture and more than 60 known consent platforms, newsletter popups, and chat widgets are removed; each 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. An MCP server provides screenshot tools for AI agents. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000 screenshots.
Sign up for ScreenshotNeo’s free plan to start with 1,000 screenshots a month and no card.
Best Value
- OUR MOST ADVANCED SCANSNAP. Large touchscreen, fast 45ppm double-sided scanning, 100-sheet document feeder, Wi-Fi and USB connectivity, automatic optimizations, and support for cloud services. Upgraded replacement for the discontinued iX1600
- CUSTOMIZABLE. SHARABLE. Select personalized profiles from the touchscreen. Send to PC, Mac, mobile devices, and clouds. QUICK MENU lets you quickly scan-drag-drop to your favorite computer apps
- STABLE WIRELESS OR USB CONNECTION. Built-in Wi-Fi 6 for the fastest and most secure scanning. Connect to smart devices or cloud services without a computer. USB-C connection also available
- PHOTO AND DOCUMENT ORGANIZATION MADE EFFORTLESS. Easily manage, edit, and use scanned data from documents, receipts, photos, and business cards. Automatically optimize, name, and sort files
- AVOIDS PAPER JAMS AND DAMAGE. Features a brake roller system to feed paper smoothly, a multi-feed sensor that detects pages stuck together, and skew detection to prevent paper damage and data loss
Frequently Asked Questions
Can I use CSV filenames with spaces or punctuation?
Yes. The example sanitizes IDs to letters, numbers, underscores and hyphens; change `safeName` if you want a different naming convention.
Does a successful screenshot prove that the captured page is accurate?
No. Review a sample of the images and the manifest, especially for sites that may show a challenge, error page or incomplete content.
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.

