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 to open each URL in your list and save a screenshot with the same viewport, wait rule, and image format. For a self-managed workflow, Playwright can capture each site in turn; a hosted API is an alternative when you want to submit a batch without managing browser infrastructure. No coaching institute URLs were supplied here, so the steps below are a reusable workflow, not a report on any particular site.

Prepare the URL list and thumbnail settings

Keep each website URL associated with its output filename. A CSV with columns such as name,url is sufficient. Validate that each URL includes a scheme such as https://; retain the original URL in your results so you can identify redirects or failures later.

Choose one capture profile before processing the list. A consistent desktop or mobile viewport, image format, and wait strategy make the resulting directory previews easier to compare. These are practical choices, not settings tested against a particular institute site.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Viewport: use one fixed width and height across the batch. A viewport screenshot captures what fits on screen; full-page capture includes the scrollable page and can produce images with substantially different heights.
  • Format: Playwright documents PNG screenshots and image buffers. Choose a format supported by your downstream use and apply it consistently.
  • Wait strategy: pages may load at different speeds. Set a reasonable navigation timeout, then use a wait condition suited to the site rather than assuming every page is ready at the same moment.
  • Output names: use stable names derived from the institute name or a row number, and avoid relying on a URL’s full text as a filesystem name.

Generate thumbnails locally with Playwright

Playwright can capture the viewport, a selected element, or the full scrollable page. For a directory-style thumbnail, a fixed viewport is usually the most comparable choice; use full-page screenshots when page length or below-the-fold content is part of the review. See the Playwright screenshot documentation and its screenshot tool documentation.

Install the browser automation package

For a Node.js project, install Playwright and its browser binaries:

npm init -y
npm install playwright
npx playwright install chromium

Run the following script from the project directory. It expects a urls.txt file with one URL per line, saves PNG viewport screenshots in thumbnails/, and writes a CSV manifest recording each URL and outcome.

const fs = require('node:fs/promises');
const path = require('node:path');
const { chromium } = require('playwright');

async function main() {
  const lines = (await fs.readFile('urls.txt', 'utf8'))
    .split(/r?n/)
    .map(line => line.trim())
    .filter(Boolean);

  const urls = lines.map((line, index) => {
    const url = new URL(line);
    if (!['http:', 'https:'].includes(url.protocol)) {
      throw new Error(`Unsupported protocol on line ${index + 1}: ${line}`);
    }
    return url.href;
  });

  await fs.mkdir('thumbnails', { recursive: true });
  const browser = await chromium.launch({ headless: true });
  const results = [];

  try {
    for (let i = 0; i < urls.length; i++) {
      const url = urls[i];
      const filename = `${String(i + 1).padStart(4, '0')}.png`;
      const page = await browser.newPage({
        viewport: { width: 1280, height: 800 },
        deviceScaleFactor: 1
      });

      try {
        const response = await page.goto(url, {
          waitUntil: 'domcontentloaded',
          timeout: 30000
        });
        await page.screenshot({
          path: path.join('thumbnails', filename),
          fullPage: false
        });
        results.push({
          url,
          file: filename,
          status: response ? response.status() : 'no HTTP response',
          outcome: 'captured'
        });
      } catch (error) {
        results.push({ url, file: '', status: '', outcome: `failed: ${error.message}` });
      } finally {
        await page.close();
      }
    }
  } finally {
    await browser.close();
  }

  const csvCell = value => `"${String(value).replaceAll('"', '""')}"`;
  const csv = [
    ['url', 'file', 'status', 'outcome'].map(csvCell).join(','),
    ...results.map(row => [row.url, row.file, row.status, row.outcome].map(csvCell).join(','))
  ].join('n');
  await fs.writeFile('thumbnails-manifest.csv', csv);
}

main().catch(error => {
  console.error(error);
  process.exitCode = 1;
});

Create urls.txt with one fully qualified URL per line, then run:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Free Fling File Transfer Software for Windows [PC Download]
  • Intuitive interface of a conventional FTP client
  • Easy and Reliable FTP Site Maintenance.
  • FTP Automation and Synchronization
node capture.js

The script uses domcontentloaded to avoid waiting for every image and third-party request to finish, then captures what is rendered at that point. If a site displays a blank or incomplete page, try a different wait condition or a short delay for that site and record the exception. The manifest preserves the URL-to-file mapping and separates navigation failures from successful captures.

Capture the full page or a specific element

For a full-page image, set fullPage: true in the screenshot call. To capture a particular element, locate it and call the locator’s screenshot method, for example await page.locator('main').screenshot({ path: 'main.png' }). A selector may not exist on every site, so handle missing elements rather than letting one page stop the whole batch.

Handle batch failures and review output

Do not treat a generated file as proof that a site rendered correctly. Review a sample of thumbnails, and check any manifest rows marked failed, returned without an HTTP response, or showing an unexpected status. A site can redirect, take longer than the timeout, render an error page, or require a different wait rule. None of those behaviors has been established for any specific Indian coaching institute website.

  • Timeout: retry the affected URL with a longer timeout or a site-appropriate wait condition; avoid increasing the timeout for every URL unless the whole batch needs it.
  • Redirect or unexpected page: inspect the final page URL and the screenshot; keep the requested URL in the manifest to preserve traceability.
  • Blank or partial capture: wait for a meaningful selector, network idle where appropriate, or a short additional delay. Sites with ongoing requests may never reach network idle, so use it selectively.
  • Missing thumbnail: confirm the URL is valid and reachable from the machine running the script, check browser installation, then retry that row independently.
  • Inconsistent appearance: confirm that viewport, device scale, color scheme, and wait settings are unchanged across pages. Different site layouts will still look different at the same viewport.

Process sequentially for a simple, easy-to-debug run. If you add concurrency for a large list, limit the number of simultaneous pages and verify that the sites and your machine can handle the additional requests. The sources establish capture modes and vendor-described batch services, but do not establish an optimal batch size or performance benchmark.

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

When a hosted batch service makes sense

A hosted screenshot API can reduce browser installation and queue-management work, especially for repeat batches. Compare whether it accepts a URL list in one request, processes jobs asynchronously, reports failures per URL, permits retries, and provides the viewport, geography, cookie, wait, format, and storage controls you need. Provider documentation describes bulk or queued capture, but those descriptions are not independent performance tests, and current limits, pricing, retention, and terms should be checked with the provider.

For an API that supports one-request capture, ScreenshotNeo is an option when clean screenshots and explicit per-response outcomes are useful. Its API supports bulk capture of up to 100 URLs per call; other hosted services documented for this workflow include AddScreenshots, Site-Shot, and Capture 815. Verify current service details before building a production workflow.

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

Or skip the browser setup

For one URL, call ScreenshotNeo’s API and save the returned image. See the ScreenshotNeo API documentation for request options and output details.

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

Replace https://stripe.com with the target site URL. For a list, repeat the request for each URL or use ScreenshotNeo’s bulk capture option for up to 100 URLs per call.

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.
  • Cookie and consent banners are accepted like a visitor, and more than 60 known consent platforms, newsletter popups, and chat widgets can be removed before capture; each step can be turned off.
  • Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing. Responses include X-Page-Verdict and X-Billed headers to indicate the result and billing status.
  • An MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.
  • The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Every feature is on every plan, and yearly billing gives two months free.

Sign up for ScreenshotNeo’s free plan to start with 1,000 screenshots a month and no card.

Permissions and responsible use

Whether automated capture and later use of a website image are permitted depends on the purpose, the site’s terms, and applicable law. Check the relevant site’s rules and your intended use before redistributing screenshots; this workflow does not establish permission for any particular coaching institute website.

Frequently Asked Questions

Can I make thumbnails from mobile layouts instead of desktop pages?

Yes. Use one fixed mobile viewport and device scale for the batch; the Playwright script’s viewport can be changed to the dimensions you need.

Should each thumbnail show the whole webpage?

Use a viewport capture for consistent directory previews and a full-page capture when below-the-fold content or page length matters.

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

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.