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

Use a browser automation loop to read each URL from a CSV, open it in a browser, and save a screenshot under a stable filename. Playwright provides the navigation and screenshot primitives; your script handles the CSV, naming, error log, and report assembly. The example below produces one image per row and records failures so you can audit the finished set.

What you need before capturing

  • A CSV file with a url header and one website URL per row.
  • Node.js and Playwright installed on the computer running the capture.
  • A folder for the screenshot files and a CSV manifest for results.

The CSV loop and filename convention are workflow choices: Playwright’s documented Page API covers navigating to a URL and saving a screenshot, but it does not automatically read your CSV. See the Playwright screenshot guide and Page API.

Prepare a CSV of URLs

Save a file named sites.csv in your project directory. Use one URL per row under the url header. An optional id column lets you choose readable, stable output names.

id,url
001,https://example.com
002,https://playwright.dev
003,https://www.wikipedia.org

Keep IDs unique and filename-safe. The script below also normalizes IDs to avoid spaces and punctuation in filenames. If you omit the id column, it numbers rows in order.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
MNN 15.6" FHD 60Hz Portable Monitor USB-C HDMI IPS HDR Gaming Laptop
  • Full HD Portable Monitor - MNN 15.6inch portable laptop monitor with 1920*1080 resolution, advanced IPS glossy screen support 178° full viewing angle, it renders accurate and bright color, draws you into the video or game with lifelike colors and amazing detail.It can effectively reduce blue light radiation damage, no flickering, eye-care, and make it easier to watch for a long time.A second monitor for working from home.
  • Double Type-C Port -For Plug & Play, the MNN monitor provides 2 Full Feature Type-C ports. Only One USB Type-C Cable is required to connect to the power supply & display signal transmission. NOTE: Your device should support thunderbolt 3.0 or USB 3.1 Type C DP ALT-MODE.which supports multiple connect ways to your laptops, PC, Phones, Macbooks, PS5/PS4, Xbox, and Switch.
  • Lightweight Ultra Slim for Travel - As a portable external monitor,MNN portable laptop monitor easily accommodate to every suitcase and backpack and stress-free when you are holding it for a long time. They are truly portable computer monitors for travelers, students, gamers,engineers, and everyone.
  • Give consideration to work and games - through multiple display modes [Copy Mode/Extended Mode/Second Screen Mode/Portrait Mode], we can bring you a clear second screen in the meeting, and expand the screen anytime and anywhere to improve work efficiency and improve the quality of life. Adjusting to HDR mode can upgrade the image to a new level, providing you with brighter highlights,deeper and more realistic colors, more realistic images, and amazing viewing/gaming experience.
  • Powerful Smart Cover - MNN portable external monitor can work in both landscape and portrait mode, can be used as a gaming monitor, screen extender for laptop or phone. Comes with a scratch-proof smart cover made of durable PU leather exterior, doubles as a stand, provides comprehensive protection for this portable computer monitor.

Install Playwright and run the capture script

  1. Create a project directory, open a terminal there, and initialize Node.js:

    npm init -y
    npm install playwright
  2. Install the browser binary Playwright will use:

    npx playwright install chromium
  3. Save the following as capture.mjs beside sites.csv:

    Rank #2
    Sale
    InnoView Portable Monitor, 15.6 Inch FHD 1080P HDMI USB C Second External Monitor for Laptop, Desktop, MacBook, Phones, Tablet, PS5/4, Xbox, Switch, Built-in Speaker with Protective Case
    • [Portable Monitor Laptop] InnoView laptop screen extender is no need of app and drivers! 15.6 in is a more suitable size for traveling or remote work. Suitable for traveler, student, gamer, engineer, and white-collar worker to connect HP laptop, Lenovo laptop, Dell laptop, Asus laptop, Macbook, iPhone, game console, tablet, PS, Xbox, etc. The laptop screen can expand the viewing area and be more efficient when playing games, working, meeting and studying
    • [Plug and Play] The travel monitor for laptop provides 2 full-function Type-C ports and 1 HDMI port to connect most devices. Only one USB-C cable is needed to connect the external display to computer, and it supports power pass-through reverse charging. Note: Your device should support Thunderbolt 3.0/4.0 or USB 3.1 Type-C DP ALT-MODE. If not, you can connect via HDMI and power cable(NOT INCLUDE IN THE PACKAGE)
    • [IPS FHD USB C Monitor] 15.6 inch portable screen with a resolution of 1920*1080P, made of A+ IPS screen, supports 178° full viewing angle, can present accurate and vivid colors. Combined with HDR, images and videos present realistic colors and amazing details. Low blue light can effectively reduce blue light radiation damage, no flicker, eye protection, making it easier for you to work and perform multiple tasks at the same time
    • [Versatile Cover and Stand] Equipped with a scratch-resistant smart protective cover made of durable PU leather, it can also be used as a stand when working. Two grooves are used to adjust the angle and fix the external monitor. It can also provide all-round protection for the 1080p monitor when going out or traveling, suitable for putting in a backpack to avoid squeezing. Optional landscape and portrait modes, save more desktop space
    • [Worry-free Purchase] Since the output power of each device is different, the screen may flicker or restart. You can power the laptop monitor to solve it. Provide a 30-day return policy and 18-month warranty (excluding external force damage). If you have any concerns, please let us know (displayed on the back of the monitor)
    import { chromium } from 'playwright';
    import { readFile, mkdir, writeFile } from 'node:fs/promises';
    import path from 'node:path';
    
    const inputFile = 'sites.csv';
    const outputDir = 'screenshots';
    const manifestFile = path.join(outputDir, 'manifest.csv');
    
    function parseCsv(text) {
      const rows = [];
      let row = [], field = '', 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 === '"') quoted = true;
        else if (ch === ',') { row.push(field); field = ''; }
        else if (ch === 'n') { row.push(field); rows.push(row); row = []; field = ''; }
        else if (ch !== 'r') field += ch;
      }
      if (quoted) throw new Error('CSV ends inside a quoted field');
      if (field.length || row.length) { row.push(field); rows.push(row); }
      return rows;
    }
    
    function csvEscape(value) {
      const s = String(value ?? '');
      return /[",rn]/.test(s) ? `"${s.replaceAll('"', '""')}"` : s;
    }
    
    function safeName(value) {
      return String(value).trim().replace(/[^a-zA-Z0-9_-]+/g, '-').replace(/^-+|-+$/g, '') || 'site';
    }
    
    const text = await readFile(inputFile, 'utf8');
    const rows = parseCsv(text);
    if (rows.length < 2) throw new Error('CSV needs a header and at least one URL row');
    const headers = rows[0].map(h => h.trim().replace(/^uFEFF/, ''));
    const urlIndex = headers.indexOf('url');
    const idIndex = headers.indexOf('id');
    if (urlIndex < 0) throw new Error('CSV must contain a url header');
    
    await mkdir(outputDir, { recursive: true });
    const browser = await chromium.launch({ headless: true });
    const manifest = [['id', 'url', 'file', 'status', 'error']];
    
    try {
      for (let i = 1; i < rows.length; i++) {
        const cells = rows[i];
        if (!cells.some(cell => cell.trim())) continue;
        const url = (cells[urlIndex] ?? '').trim();
        const id = safeName(idIndex >= 0 ? cells[idIndex] || String(i).padStart(3, '0') : String(i).padStart(3, '0'));
        const filename = `${id}-${safeName(new URL(url).hostname)}.png`;
        let page;
        try {
          if (!url) throw new Error('Missing URL');
          const parsed = new URL(url);
          if (!['http:', 'https:'].includes(parsed.protocol)) throw new Error('URL must use http or https');
          page = await browser.newPage({ viewport: { width: 1440, height: 900 } });
          const response = await page.goto(url, { waitUntil: 'load', timeout: 45000 });
          if (!response) throw new Error('Navigation returned no HTTP response');
          await page.screenshot({ path: path.join(outputDir, filename), fullPage: true });
          manifest.push([id, url, filename, `captured (HTTP ${response.status()})`, '']);
        } catch (error) {
          manifest.push([id, url, '', 'failed', error.message]);
        } finally {
          await page?.close();
        }
      }
    } finally {
      await browser.close();
      const csv = manifest.map(row => row.map(csvEscape).join(',')).join('n') + 'n';
      await writeFile(manifestFile, csv, 'utf8');
    }
    
    console.log(`Finished. See ${outputDir}/ and ${manifestFile}`);
  4. Run it:

    node capture.mjs

Each successful row creates a full-page PNG in screenshots/. The manifest records the source URL, filename, status and any error; an HTTP error status is logged with the capture rather than silently treated as a failed browser navigation. The script uses a 1440 × 900 viewport and waits for the page load event, but pages that load substantial content later may need a different wait condition or an explicit delay.

Choose what each report image should show

Initial viewport or full page

The script uses fullPage: true to include the full scrollable page. For a first-screen snapshot instead, change the screenshot line to await page.screenshot({ path: path.join(outputDir, filename) });. Playwright documents full-page screenshots and other screenshot options in its screenshot guide.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Sale
KYY Portable Monitor 15.6" 1080P Computer Monitor Screen Extender w/Cover
  • [ FHD 1080P PORTABLE MONITOR ]: KYY using a 15.6''(8.8"x14.2") advanced IPS screen with 178° wide viewing angle, Delivers 1920*1080 breathtaking viewing quality and HDR technology, KYY portable gaming monitor has excellent color rendering ability, provide you the clearer, smooth, excellent performance in gaming/multimedia. It can effectively reduce blue light radiation damage, no flickering, eye-care, and make it easier to watch for a long time
  • [ WIDE COMPATIBILITY ]: KYY portable monitor for laptop equipped with 2 Full Function Type-C ports and Mini-HDMI port, easy access to your favorite devices with 1 cable solution as long as your device support Thunderbolt 3 or 3.1 USB-Type-C, compatible with most laptop, smartphone, PC, PS4, XBOX and more.
  • [ ULTRA-SLIM PORTABLE DISPLAY ]: KYY USB C portable monitor features a 0.3inch ultra-slim profile(1.7lb), it is easy to slides into your bag, allows you to carry it everywhere, ideal for a simple on-the-go dual-monitor setup or extend your phone screen for movies or games. No driver needed and equipped with 3.5mm audio inputs and 2 built-in stereo speakers to enhance entertainment experience
  • [ DURABLE SMART COVER ]: Comes with a scratch-proof smart cover made of durable PU leather exterior, doubles as a stand, provides comprehensive protection and frameless magnetic design for this portable computer monitor. There are two grooves in the cover base to give at least some choice of viewing angle for your comfort for less cumbersome installation
  • [ LIGHTWEIGHT BUT POWERFUL ]: KYY portable external monitor can work in both landscape and portrait mode, can be used as a gaming monitor, screen extender for laptop or phone. It has a unique designed Premium gray metal appearance, 2 built-in speakers to play audio, a friendly menu control wheel for setting, and 24/7 professional support team

Image format and capture target

Playwright’s screenshot API supports image formats and options such as capturing an element. The CLI additionally documents PNG, JPEG and WebP output, custom filenames, high-resolution screenshots and PDF export. Use PDF if the report workflow needs page documents rather than separate image files; see Playwright CLI documentation.

High-resolution evidence

The Playwright CLI’s high-resolution mode captures using device pixels. Use it when fine detail matters, while accounting for larger output files. The script shown here uses the Page API and ordinary PNG capture; it does not enable the CLI’s high-resolution mode.

Rank #4
Anyuse 15.6" FHD IPS USB-C HDMI Portable Monitor
  • 15.6" FHD Portable Monitor - Featuring a 1920*1080P resolution, 178°FULL viewing angle, HDR, and Low Blue Light Super Clear IPS A-grade screen, this Anyuse portable screen for laptop enhanced visual experience, reduces eye strain and fatigue.
  • Double Type-C Port -For Plug & Play - Anyuse portable monitor features 2 full-featured Type-C ports and 1 MINI HDMI port. You can easily access your favorite devices with just one USB Type-C or MINI HDMI cable. NOTE: Your device should support Thunderbolt 3.0/4.0 or USB 3.1 Type C DP ALT-MODE.
  • Portable & Light Weight - At just 1.37lbs and 0.04 inch thin, this portable laptop monitor is ultra-portable and perfect for on-the-go productivity or gaming. flexible to use anywhere you need a second screen for laptop. bringing you efficiency for meetings, work from home, and presentations.
  • Able to Balance Work and Play - With multiple display modes [copy mode/extension mode/second screen mode]. During meetings,it can copy your laptop's content as a second screen to share with others.At work, it can be used as a second extended screen to increase productivity. In life, adjusting to HDR mode can upgrade the image to a new level, providing you with brighter highlights, more realistic colors and images.Two built-in speakers provide an amazing viewing and gaming experience.
  • Wide Compatibility - Enjoy hassle-free plug-and-play functionality with the portable monitor. it is compatible with all devices equipped with HDMI and USB Type-C ports like laptops, PS, XBOX, SWITCH game consoles, No app or driver installation required.

Turn the screenshots into an auditable report

Keep the generated manifest with the image folder. It provides a row-by-row link between each CSV entry and its output or error. In the report, show the stable ID or label, the original URL and the corresponding image; avoid relying on file order alone. If you rerun captures, preserve the original CSV and note the run date separately so readers can distinguish versions.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Common problems and fixes

Symptom Likely cause What to do
“CSV must contain a url header” Header is absent, misspelled, or has extra spaces or a byte-order mark. Use a header exactly named url. The script trims spaces and removes a leading UTF-8 byte-order mark.
“URL must use http or https” or invalid URL error Cell is blank, malformed, or missing the protocol. Enter complete addresses such as https://example.com; check that the CSV row has not shifted due to an unquoted comma.
Timeout during navigation The server is slow, inaccessible from your network, or keeps loading resources. Check the URL in a browser. Increase timeout for slow sites, or use a suitable wait condition if the page’s relevant content appears before all network activity ends.
Screenshot is blank or misses content The page renders after the load event, requires interaction, or defers content until scrolling. Wait for a specific selector with page.waitForSelector('selector') before the screenshot, or add a deliberate delay. For lazy content, scrolling or a page-specific interaction may be needed before capture.
Browser executable not found Playwright package is installed but Chromium is not. Run npx playwright install chromium in the project.
Duplicate files overwrite earlier captures CSV IDs are repeated or normalize to the same filename. Make IDs unique and filename-safe; inspect the generated manifest and use distinct IDs for each row.

Performance, reliability, and cost

This script opens one page at a time in one browser, which limits simultaneous load and keeps failures associated with individual rows. Large CSVs can take a while: every URL must be navigated and captured, and full-page images can use substantial disk space. Parallel pages can increase throughput, but also increase memory use and the likelihood of stressing the sites being captured; add concurrency deliberately and retain per-row error handling.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
VILVA 15.6" FHD IPS USB-C HDMI Portable Monitor
  • Experience Unrivaled Visuals: Get the ultimate viewing experience with the VILVA Professional Portable Monitor! With its incredibly sharp 15.6 inch FHD IPS Screen, you'll get a 1920 x 1080 resolution that viewing experience. Get it now and start working smarter, not harder and get yourself the professional portable monitor today.
  • Truly Wide Compatibility: Lets you connect your laptop, PC, MAC, tablet, phone, XBOX, PS3/PS4/PS5, switches, and more via USB-C or HDMI Port-- deliver a stable connection and steady data transmission. Enjoy great sound with the built-in dual stereo speakers, perfect for your business trip, travel, or home entertainment gaming setup.
  • Durable Smart Cover: VILVA portable monitor has a high quality and durable metal material, which makes it shows a fine metal texture and high strength. Has magnetic leather smart cover that provides protection for the entire screen and easy to stand the portable monitor.
  • Look no further!: Get this portable monitor right Now, complete with magnetic cover, USB-C to USB-C cable, Mini HDMI to HDMI cable.

Playwright is a locally run, open-source browser automation tool; this workflow has no per-screenshot service charge, but you provide the machine, browser installation, storage and maintenance. Site access controls, network failures and dynamic content can still prevent a useful image. Respect the target websites’ terms and access restrictions, particularly for large batches.

Or skip the browser setup

ScreenshotNeo is a website screenshot API with bulk capture for up to 100 URLs per call. For the CSV workflow, send each row’s URL to the API and keep the returned image and response details in your manifest. The API accepts a URL in one GET request and can return PNG, JPEG, WebP or PDF. See the ScreenshotNeo documentation.

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

ScreenshotNeo removes supported cookie banners, newsletter popups and chat widgets before capture; bot checks, blank pages and failed loads are never billed. Its MCP server lets AI agents take screenshots, and 1,000 screenshots per month are free with no card; paid plans start at $5 for 3,000. Create a free account at ScreenshotNeo sign-up.

Frequently Asked Questions

Can I capture only a specific part of each page?

Yes. Playwright’s screenshot API supports element screenshots; target the desired element in the script instead of capturing the whole page.

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

Can the same workflow create PDFs instead of PNGs?

Yes. Playwright’s CLI documents PDF export, and ScreenshotNeo can return PDF output. Choose the output that fits how the report will be delivered.

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.