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

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

Use a browser automation tool to capture each URL and build the output filename from that URL. For a dependable batch, sanitize the URL for the filesystem, add a short hash to prevent collisions, and keep the original URL in a manifest so every image can be traced back to its source.

Choose a batch method

For recurring jobs or custom readiness checks, use Playwright’s API: your script controls navigation, naming, capture settings, and failure handling. For a known list with little custom logic, shot-scraper’s multi command accepts a YAML configuration with a URL and output filename for each item. Playwright’s CLI is useful for one-off captures where you want to specify a filename directly.

The right choice depends on how much navigation and error-handling control you need, whether you already maintain a URL list, and whether the job is occasional or recurring. No one method is best for every site or batch.

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

Build safe, traceable filenames

A URL cannot be used literally as a filename on every operating system: it may contain reserved punctuation, be too long, or share a basename with another URL. A practical pattern is index-host-path-short-hash.png. Replace unsafe characters, normalize repeated separators, and cap the length. The hash helps distinguish URLs that otherwise sanitize to the same name.

#1 Best Overall
Sandisk 2TB Extreme Portable SSD, Up to 1050MB/s, USB-C, USB 3.2 Gen 2, IP65 Water and Dust Resistance, Updated Firmware, External Solid State Drive, SDSSDE61-2T00-G25
  • Get NVMe solid state performance with up to 1050MB/s read and 1000MB/s write speeds in a portable, high-capacity drive(1) (Based on internal testing; performance may be lower depending on host device & other factors. 1MB=1,000,000 bytes.)
  • Up to 3-meter drop protection and IP65 water and dust resistance mean this tough drive can take a beating(3) (Previously rated for 2-meter drop protection and IP55 rating. Now qualified for the higher, stated specs.)
  • Use the handy carabiner loop to secure it to your belt loop or backpack for extra peace of mind.
  • Help keep private content private with the included password protection featuring 256‐bit AES hardware encryption.(3)
  • Easily manage files and automatically free up space with the SanDisk Memory Zone app.(5). Non-Operating Temperature -20°C to 85°C

Keep a CSV or other manifest containing at least the original URL, output filename, capture time, and status. Record the final URL too if redirects matter. The filename is a convenient label, not a reversible encoding of the complete URL; the manifest preserves exact provenance.

Bulk capture with Playwright

Install Playwright for Node.js and its Chromium browser, then save this as capture.mjs. It reads one URL per line from urls.txt, saves full-page PNGs, and writes a CSV manifest. The script uses a stable URL-derived name plus a SHA-256 prefix, and records failures rather than stopping the entire batch.

Rank #2
Sandisk 1TB Portable SSD, Up to 800MB/s Read Speeds, Black (Old Model)
  • Solid state performance with up to 800MB/s read speeds in a portable drive. (Based on internal testing; performance may be lower depending on host device, interface, usage conditions and other factors. 1MB=1,000,000 bytes.)
  • Back up your content and memories on a storage solution that fits seamlessly into your mobile lifestyle.
  • Take it with you on your adventures—up to two-meter drop protection means this durable drive can take a beating. (Based on internal testing.)
  • Secure it to your belt loop or backpack for extra peace of mind thanks to the tough rubber hook.
  • From Sandisk, a brand professional photographers trust to take on assignments.
import { chromium } from 'playwright';
import { createHash } from 'node:crypto';
import { mkdir, readFile, writeFile } from 'node:fs/promises';
import path from 'node:path';

const urls = (await readFile('urls.txt', 'utf8'))
  .split(/r?n/).map(s => s.trim()).filter(Boolean);
const outDir = 'screenshots';
await mkdir(outDir, { recursive: true });
const browser = await chromium.launch({ headless: true });
const rows = [['source_url', 'final_url', 'filename', 'captured_at', 'status']];

function filenameFor(rawUrl) {
  const u = new URL(rawUrl);
  const stem = `${u.hostname}${u.pathname}`
    .replace(/[^a-zA-Z0-9._-]+/g, '-')
    .replace(/-+/g, '-')
    .replace(/^[-._]+|[-._]+$/g, '')
    .slice(0, 100) || 'page';
  const hash = createHash('sha256').update(rawUrl).digest('hex').slice(0, 10);
  return `${stem}-${hash}.png`;
}
function csvCell(value) {
  return `"${String(value ?? '').replaceAll('"', '""')}"`;
}

try {
  for (const url of urls) {
    const filename = filenameFor(url);
    const page = await browser.newPage({ viewport: { width: 1365, height: 900 } });
    let status = 'ok';
    let finalUrl = '';
    try {
      const response = await page.goto(url, { waitUntil: 'networkidle', timeout: 45000 });
      finalUrl = page.url();
      if (response && !response.ok()) status = `http-${response.status()}`;
      await page.screenshot({ path: path.join(outDir, filename), fullPage: true });
    } catch (error) {
      status = `error: ${error.message}`;
    } finally {
      rows.push([url, finalUrl, filename, new Date().toISOString(), status]);
      await page.close();
    }
  }
} finally {
  await browser.close();
  await writeFile('screenshots-manifest.csv', rows.map(row => row.map(csvCell).join(',')).join('n') + 'n');
}

Run it with node capture.mjs. Place one complete URL per line in urls.txt, including its scheme, such as https://example.com/article. The script’s networkidle wait can be unsuitable for pages that keep network connections open; use a page-specific selector with page.goto() followed by page.locator('selector').waitFor(), or a deliberate short delay, when that better matches the page’s readiness. A selector should identify content that actually needs to appear in the screenshot.

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

Playwright’s screenshot API accepts an explicit path, a fullPage option, and a scale choice. With fullPage: true, it captures the full scrollable page; omit it for the visible viewport. CSS scale produces one output pixel per CSS pixel, while device scale uses device pixels and can produce larger files on high-DPI devices. See the Playwright Page API.

Rank #3
SSK Portable SSD 500GB External Solid State Hard Drive USB C Up to 1050MB/s
  • Capacity Display Variance: 500GB external ssd often appears as around 465GB on Windows. MacOS can show full 500 GB capacity. This is binary calculation difference and doesn’t affect SSD hard drive actual physical storage
  • 1050 MB/s Speed: Instantly access to your files with blazing-fast 10Gbps external SSD read up to 1050MB/s and write up to 1000MB/s. LED Light indicates USB SSD instant activity
  • Data Security: Solid state drives S.M.A.R.T. health diagnostics​ and adaptive TRIM optimizing data block management ensures consistent write speeds and extends the longevity of the portable SSD
  • USB-C & USB-A Cable: Both cables featuring rapid USB 3.2 Gen2, this USB SSD effortlessly bridges devices, enabling seamless cross-platform file transfers and backup between computers, smartphones, tablets and iPhone
  • Always Fast: No slowdowns for large file transfers. With SLC caching (25% of current available capacity allocated as high-speed cache), this external SSD delivers steady 10Gbps for transfers within the cache capacity

Use shot-scraper for a configured URL list

For a batch that fits a declarative configuration, create a YAML file with one entry per URL and an explicit output name. The multi command reads the configuration and supports per-image dimensions, wait settings, and selectors. For example, the shape is:

- url: https://example.com/
  output: screenshots/example-com-home-7ac19f.png
- url: https://example.com/pricing
  output: screenshots/example-com-pricing-21b3e4.png

Use your own sanitized URL-derived names and collision suffixes in the output values. Then run shot-scraper multi urls.yml. Consult the shot-scraper documentation for the configuration syntax supported by the installed release. Its single-page command can derive a default output from a URL, but explicit output names make batch naming predictable.

Rank #4
Sale
Sandisk 1TB Extreme Portable SSD, Up to 2000MB/s Transfer Speeds-New Model
  • NEARLY 2X FASTER THAN OUR PREVIOUS GENERATION(8) – move 1,000 high-res photos in under 60 seconds(6) with up to 2000MB/s transfer speeds(2).
  • IP65 RATING AND UP TO 3M DROP PROTECTION(3) – protects against spills and drops.
  • POCKET-SIZED – fits easily in pockets and small bags.
  • SPACE TO OWN YOUR AI CONTENT – speed and capacity to download your high-res clips and photo edits.
  • 256-BIT AES ENCRYPTION(4) – helps keep private files secure with password protection.

Use Playwright CLI for a one-off capture

The CLI can save a screenshot under a chosen filename; supply --filename rather than relying on its timestamp-based default. It also supports full-page capture with --full-page. This is convenient for an isolated URL, but a script or YAML batch is easier to audit and repeat across a long list. See Playwright’s screenshots and PDF command reference.

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

Keep a batch consistent and recoverable

  • For visual comparisons: keep the browser, viewport dimensions, device scale, and capture timing the same for every URL. Rendering can vary with operating system, browser version, settings, hardware, power source, and headless mode, as Playwright notes in its visual comparison guidance.
  • For dynamic pages: choose waits based on the content. Animations, delayed assets, personalization, cookie banners, and chat widgets can change what appears; a universal fixed delay does not make every capture reliable.
  • For long pages: full-page captures can create very tall images. Use viewport captures for fixed-screen comparisons, and full-page images when the complete scrollable document is needed.
  • For audits: retain the manifest and review non-OK status entries, redirects, duplicate names, and unusually tall outputs. Do not infer success merely because a file was created.

Troubleshoot common batch problems

  • Two images have the same name: include a hash of the original URL, not only its sanitized path. Distinct query strings can also identify different page variants, so include them in the hash input even if they are omitted from the readable basename.
  • Navigation times out: the page may be slow or never reach the chosen load state. Check whether it loaded and select a page-specific ready condition or a more suitable wait state; record the timeout in the manifest and retry selectively.
  • A screenshot misses content: the page may need a selector wait or a known delay for deferred content. Confirm the required element appears before capture; changing the wait state blindly can make the batch slower without fixing readiness.
  • Some URLs fail while others work: validate that each line is a complete URL, preserve per-URL status, and rerun only failed entries. A single bad page should not erase already completed captures.
  • Images differ between runs: standardize the browser and capture settings, and account for changing site content or environmental rendering differences before treating the change as a layout regression.
  • Files are unwieldy: switch from full-page to viewport capture where only the visible screen matters, or use CSS-pixel scale instead of device scale where appropriate.
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 can capture a URL through one GET request, returning an image or PDF. Its clean-shot steps accept cookie and consent banners like a visitor and remove 60+ known consent platforms, newsletter popups, and chat widgets; each step can be turned off. Bot checks/CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, with the outcome indicated in X-Page-Verdict and X-Billed headers. It also has an MCP server with take_screenshot, get_page_info, and capture_pdf tools for AI agents.

Use your ScreenshotNeo API key in place of YOUR_API_KEY. This example saves the response as shot.webp; see the ScreenshotNeo API documentation for response and option details.

Best Value
Sale
Seagate 2TB Portable Hard Drive | USB 3.0 (STGX2000400)
  • Easily store and access 2TB to content on the go with the Seagate Portable Drive, a USB external hard drive
  • Designed to work with Windows or Mac computers, this external hard drive makes backup a snap just drag and drop
  • To get set up, connect the portable hard drive to a computer for automatic recognition no software required
  • This USB drive provides plug and play simplicity with the included 18 inch USB 3.0 cable
  • The available storage capacity may vary.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

ScreenshotNeo’s free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 screenshots. Sign up for the free plan.

Frequently Asked Questions

How do I save a screenshot with the page URL in the filename?

Use a sanitized URL-derived basename and add a short hash to avoid collisions; keep the exact URL in a manifest.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

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

How can I take screenshots of a list of URLs?

Read one URL per line in a script such as the Playwright example, or configure one URL and output path per entry in shot-scraper YAML.

How do I capture the full page instead of just the viewport?

Set Playwright’s screenshot option to fullPage: true; for the CLI, use --full-page.

Quick Recap

Bestseller No. 2
Sandisk 1TB Portable SSD, Up to 800MB/s Read Speeds, Black (Old Model)
Sandisk 1TB Portable SSD, Up to 800MB/s Read Speeds, Black (Old Model)
From Sandisk, a brand professional photographers trust to take on assignments.
$188.90
SaleBestseller No. 4
Sandisk 1TB Extreme Portable SSD, Up to 2000MB/s Transfer Speeds-New Model
Sandisk 1TB Extreme Portable SSD, Up to 2000MB/s Transfer Speeds-New Model
IP65 RATING AND UP TO 3M DROP PROTECTION(3) – protects against spills and drops.; POCKET-SIZED – fits easily in pockets and small bags.
$249.99
SaleBestseller No. 5
Seagate 2TB Portable Hard Drive | USB 3.0 (STGX2000400)
Seagate 2TB Portable Hard Drive | USB 3.0 (STGX2000400)
This USB drive provides plug and play simplicity with the included 18 inch USB 3.0 cable; The available storage capacity may vary.
$129.99

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.