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.

Use a browser automation script to capture each website, a recurring scheduler to run it monthly, and a separate PDF assembly step to turn that month’s images into a report. The example below uses Playwright with GitHub Actions; it saves timestamped captures as workflow artifacts and creates a PDF with each image, its URL, and its capture time.

Plan the captures and report

Before automating, decide what each monthly run should preserve. Keep the same browser, viewport, capture scope, and page state across runs so visual changes are easier to spot.

  • URLs: list every page to include and give each a stable filename.
  • Capture scope: choose the visible viewport, the full scrollable page, or a specific element. Playwright supports all three screenshot styles; see its screenshot documentation.
  • Page state: identify any required login, consent choice, navigation, or interaction. Store credentials as protected CI secrets rather than in the script.
  • Viewport and browser: set dimensions and use the same browser environment each run.
  • Report contents: choose ordering, captions, and how long the images and PDFs should be retained.

A set of screenshots is an archive, not yet a readable report. Plan the PDF layout and its assembly explicitly.

Build a repeatable Playwright capture job

This Node.js example captures full pages from a URL list, writes images beneath a folder named for the reporting month, and assembles those images into one PDF with a URL and timestamp caption. It uses a fixed viewport and waits for each page to reach the DOM content loaded state; for sites that render important content later, replace that wait with a meaningful selector or page condition.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Brother DCP-L2640DW Wireless Compact Monochrome Multi-Function Printer, Copy, Scan, Duplex, Mobile Printing
  • BEST FOR SMALL BUSINESSES – Engineered for extraordinary productivity, the Brother DCP-L2640DW Monochrome (Black & White) 3-in-1 combines laser printer, scanner, copier in one compact footprint and delivers high-quality black & white prints
  • FAST PRINTER WITH EFFICIENT SCANNING – Produces documents quickly with print speeds up to 36 ppm(2) and scan speeds up to 23.6/7.9 ipm(3) (black/color). A 50-page auto document feeder(4) allows for convenient, time saving multi-page scanning and copying
  • FLEXIBLE CONNECTION OPTIONS – Easily navigate the changing demands of your business with secure multi-device connectivity via built-in dual-band wireless (2.4GHz / 5GHz) and Ethernet. Or connect locally to a single computer via USB interface
  • BROTHER MOBILE CONNECT APP – Print, scan, and manage your wireless printer anytime, from almost anywhere from your mobile device. Order Brother Genuine Supplies, track toner usage, and complete more work on-the-go(5)
  • CHOOSE BROTHER GENUINE TONER – When it’s time to replace your toner, be sure to choose Brother Genuine TN830 or TN830XL replacement toner. And with Refresh EZ Print Subscription Service, you’ll never worry about running out of toner again and you’ll enjoy savings of up to 50%(6) on Brother Genuine Toner. Get started with Refresh today with a Free Trial(1)

1. Create the project and install dependencies

mkdir monthly-site-report
cd monthly-site-report
npm init -y
npm install --save-exact playwright pdf-lib
npx playwright install chromium

Commit package.json and package-lock.json so CI installs the same dependency versions. Pin the Node runtime in the workflow as well. For a browser-based CI setup, Playwright’s official Continuous Integration guidance covers installation, workers, GitHub Actions, and artifact upload.

2. Add the capture and PDF script

Save this as report.mjs. Replace the example URLs with the pages you want. The script uses REPORT_MONTH when supplied by the scheduler; otherwise, it derives the month from the current UTC date.

import { chromium } from 'playwright';
import { PDFDocument, StandardFonts, rgb } from 'pdf-lib';
import { mkdir, readFile, writeFile } from 'node:fs/promises';
import path from 'node:path';

const targets = [
  { name: 'homepage', url: 'https://example.com/' },
  { name: 'pricing', url: 'https://example.com/pricing' },
];

const month = process.env.REPORT_MONTH ?? new Date().toISOString().slice(0, 7);
const outputDir = path.join('output', month);
await mkdir(outputDir, { recursive: true });

const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({
  viewport: { width: 1440, height: 1000 },
  deviceScaleFactor: 1,
});
const pdf = await PDFDocument.create();
const font = await pdf.embedFont(StandardFonts.Helvetica);

try {
  for (const target of targets) {
    const page = await context.newPage();
    const capturedAt = new Date().toISOString();
    const imagePath = path.join(outputDir, `${target.name}.png`);

    await page.goto(target.url, { waitUntil: 'domcontentloaded', timeout: 60000 });
    await page.screenshot({ path: imagePath, fullPage: true });

    const image = await pdf.embedPng(await readFile(imagePath));
    const pageWidth = 595.28;
    const pageHeight = 841.89;
    const margin = 28;
    const captionHeight = 42;
    const availableWidth = pageWidth - margin * 2;
    const availableHeight = pageHeight - margin * 2 - captionHeight;
    const scale = Math.min(availableWidth / image.width, availableHeight / image.height);
    const width = image.width * scale;
    const height = image.height * scale;
    const reportPage = pdf.addPage([pageWidth, pageHeight]);

    reportPage.drawText(`${target.name} | ${capturedAt}`, {
      x: margin, y: pageHeight - margin - 12, size: 9, font, color: rgb(0.15, 0.15, 0.15),
    });
    reportPage.drawText(target.url, {
      x: margin, y: pageHeight - margin - 26, size: 8, font, color: rgb(0.25, 0.25, 0.25),
    });
    reportPage.drawImage(image, {
      x: (pageWidth - width) / 2,
      y: margin,
      width,
      height,
    });
    await page.close();
  }

  await writeFile(path.join(outputDir, `website-report-${month}.pdf`), await pdf.save());
} finally {
  await context.close();
  await browser.close();
}

The PDF code scales each full-page image proportionally to fit one letter-sized page. Very long pages may therefore appear small. For better legibility, split long captures across PDF pages or use a report layout designed for the pages you monitor. The capture itself remains a PNG, so the PDF is not a substitute for keeping the original image.

Rank #2
Brother HL-L2405W Wireless Compact Monochrome Laser Printer with Mobile Printing, Black & White Output | Includes Refresh Subscription Trial(1), Works with Alexa
  • BEST FOR HOMES & HOME OFFICES – Engineered for consistent, premium print quality, the Brother HL-L2405W Monochrome (Black & White) Laser Printer delivers sharp, crisp prints at an affordable price. Prints one-sided documents at speeds up to 30ppm(2)
  • COMPACT, CONNECTED PRINTER – Flexible connection options make this an ideal printer for home use and at-home offices. Securely connect to multiple devices with built-in dual-band wireless (2.4GHz/5GHz) or locally to a single computer via USB interface
  • BROTHER MOBILE CONNECT APP – Manage your printer remotely and print from your mobile device anytime, from almost anywhere. Order Brother Genuine Supplies, track toner usage, and complete more work on-the-go(3)
  • VERSATILE PAPER HANDLING – Enjoy seamless, reliable everyday printing with the 250-sheet paper tray(4) and a manual feed slot that enables printing on envelopes and specialty pape
  • BROTHER IS AT YOUR SIDE – Backed by Brother with a 1-year limited warranty and free online, call, or live chat support for the life of your printer

3. Run it locally first

REPORT_MONTH=2026-10 node report.mjs

Look in output/2026-10/ for the individual PNG files and website-report-2026-10.pdf. Open the PDF and images, verify the intended content is present, and adjust page readiness or viewport settings before scheduling.

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

Schedule it monthly with GitHub Actions

GitHub Actions can run the capture job on a cron schedule. Workflow schedules use UTC; check the current workflow syntax reference for schedule semantics, availability, and timezone behavior. This example runs at 09:00 UTC on the first day of each month.

Create .github/workflows/monthly-report.yml:

name: Monthly website screenshots

on:
  schedule:
    - cron: '0 9 1 * *'
  workflow_dispatch:

permissions:
  contents: read

jobs:
  capture:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
          cache: npm
      - run: npm ci
      - run: npx playwright install --with-deps chromium
      - name: Capture pages and build report
        run: node report.mjs
        env:
          REPORT_MONTH: ${{ github.run_started_at }}
      - name: Upload monthly output
        uses: actions/upload-artifact@v4
        with:
          name: website-report-${{ github.run_id }}
          path: output/
          if-no-files-found: error
          retention-days: 90

For a month label instead of a full timestamp, change the script to derive the month from the run date or set it in a workflow step. The example intentionally uploads an artifact rather than committing screenshots back into the repository. Artifact retention is configured here for 90 days; choose a period that matches your archive needs and the platform’s current limits.

Rank #3
Canon imageCLASS LBP6030w - Monochrome Single-Function Wireless Compact Wireless Laser Printer, 1 Year Limited Warranty, 19 PPM, White - Print Only
  • FAST PRINT SPEEDS: Print up to 19 pages per minute.
  • COMPACT DESIGN: Space-saving, compact design fits anywhere in your home, school or small office.
  • WIRELESS CONNECTIVITY: Print from almost anywhere in your workspace using your compatible mobile device.
  • PAPER CAPACITY: Up to 150 sheets.
  • SUSTAINABILITY: Uses less than 2 watts in Energy Saver mode.

Playwright’s CI guidance recommends using one worker in CI to favor stability and reproducibility. This script processes URLs sequentially, which also avoids launching many browser pages at once. If the target list grows, increase concurrency only after checking resource limits and whether the sites tolerate parallel requests.

Check that each run produced a complete report

  • Confirm the workflow completed successfully and the artifact contains one image per configured URL plus the PDF.
  • Open the PDF and check its reporting month, page count, ordering, captions, and legibility.
  • Compare a few screenshots with the actual pages to confirm that the expected content and state were captured.
  • Keep failures visible. Do not publish a PDF if a page timed out or a screenshot is missing; fail the run and investigate instead.
  • Download artifacts before their retention period expires if you need a longer-term archive.

Troubleshoot common failures

The scheduled workflow did not run

Check the workflow file’s path and YAML syntax, the cron expression, the UTC run time, and the repository’s Actions settings. Use workflow_dispatch to test manually. Consult GitHub’s workflow syntax documentation for current scheduling conditions and limitations.

Free tools Windows power users keep installed

One-click scans. No signup required.

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

Browser installation or launch fails in CI

Install the browser and its operating-system dependencies in the job with npx playwright install --with-deps chromium. Ensure the Node and Playwright versions are compatible and that the workflow is using the lockfile through npm ci.

Rank #4
Brother HL-L2460DW Wireless Compact Monochrome Laser Printer with Duplex, Mobile Printing, Black & White Output | Includes Refresh Subscription Trial(1), Works with Alexa
  • BEST FOR HOME OFFICES & SMALL TEAMS – Engineered for consistent, premium print quality, the Brother HL-L2460DW Monochrome (Black & White) Laser Printer produces documents that are clear, crisp, and easy to review and share, all at an affordable price
  • COMPACT, CONNECTED, EXCEPTIONALLY EFFICIENT– Connect with built-in dual-band wireless (2.4GHz/5GHz), Ethernet, or to a single computer via USB interface. Prints at speeds up to 36ppm(2), plus automatic duplex printing saves time and reduces paper waste
  • BROTHER MOBILE CONNECT APP – Manage your wireless printer remotely and print from your mobile device anytime, from almost anywhere. Order Brother Genuine Supplies, track toner usage, and complete more work on-the-go(3)
  • VERSATILE PAPER HANDLING – Tackle high-volume black & white printing with the 250-sheet capacity paper tray.(4) The manual feed slot enables printing on envelopes and specialty paper
  • BROTHER IS AT YOUR SIDE – Backed by Brother with a 1-year limited warranty and free online, call, or live chat support for the life of your printer

A screenshot is blank, incomplete, or still loading

A fixed delay cannot reliably account for different sites and network conditions. Wait for a page-specific selector that indicates the relevant content is ready, or wait for an appropriate network condition. Some pages update continuously, so network idle may never occur; in that case, wait for the content you need rather than the whole page to stop making requests. Check whether a login, consent banner, bot check, or client-side error changed the page state.

The PDF is too small or hard to read

A long full-page screenshot is being scaled to fit one sheet. Use a larger paper size, split the screenshot over multiple PDF pages, or capture selected elements instead of the entire page. Test the chosen layout with the longest page in the set.

The job fails on one target and omits later captures

By default, an unhandled navigation or screenshot error stops the script. That prevents a partial report from looking complete. If partial monthly results are useful, catch errors per target, record a visible failure entry in the PDF, and still mark the run as incomplete; do not silently skip the URL.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Choose between self-managed capture and a managed API

Playwright plus a scheduled job gives you direct control of the browser, viewport, page readiness, and capture region, but you maintain the runtime, browser dependencies, script, and report assembly. A managed screenshot API can reduce browser setup, but evaluate its current scheduling, retention, access control, PDF, privacy, limits, and pricing capabilities rather than assuming they are included.

Best Value
HP LaserJet M110w | Monochrome | Laser Printer
  • FROM AMERICA'S MOST TRUSTED PRINTER BRAND – Perfect for small teams printing professional-quality black & white documents and reports. Perfect for 1-3 people
  • WORLD'S SMALLEST LASER IN ITS CLASS – Precision laser printing that fits anywhere
  • FAST PRINT SPEEDS – Up to 21 black-and-white pages per minute single-sided
  • WIRELESS WITH SELF-RESET – Helps you stay connected
  • PRINT FROM ANY DEVICE – Wireless printing from any mobile device, PC or tablet. Works with Microsoft, Mac, AirPrint, Android, Chromebook and more

ScreenshotNeo is a managed website screenshot API and MCP server. It fits this workflow when you want API-based captures or an AI agent integration; use a separate scheduler and PDF assembly step for the monthly report.

Or skip the browser setup

One request captures a URL; save the response as an image. See the ScreenshotNeo API documentation for request options and response details.

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 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 the Free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000. The API returns an image or PDF, but you still need a recurring scheduler and a report-assembly step for a monthly PDF report. Sign up for free: 1,000 screenshots a month, no card required.

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

Frequently Asked Questions

Can I run the monthly capture before the first of the month?

Yes. Change the workflow’s cron day and UTC time to the point in the reporting cycle that suits you, then verify the schedule in GitHub Actions.

Can the report include only part of a page?

Yes. Playwright can capture an element by selector; use that when a full-page image would be too large or would include irrelevant content.

Quick Recap

Bestseller No. 3
Canon imageCLASS LBP6030w - Monochrome Single-Function Wireless Compact Wireless Laser Printer, 1 Year Limited Warranty, 19 PPM, White - Print Only
Canon imageCLASS LBP6030w - Monochrome Single-Function Wireless Compact Wireless Laser Printer, 1 Year Limited Warranty, 19 PPM, White - Print Only
FAST PRINT SPEEDS: Print up to 19 pages per minute.; PAPER CAPACITY: Up to 150 sheets.; SUSTAINABILITY: Uses less than 2 watts in Energy Saver mode.
$140.00
Bestseller No. 5
HP LaserJet M110w | Monochrome | Laser Printer
HP LaserJet M110w | Monochrome | Laser Printer
WORLD'S SMALLEST LASER IN ITS CLASS – Precision laser printing that fits anywhere; FAST PRINT SPEEDS – Up to 21 black-and-white pages per minute single-sided

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.