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

Use two separate pieces: a browser automation script captures the page, and a scheduler runs that script at your chosen interval. A practical self-hosted setup is Playwright plus GitHub Actions. Playwright handles viewport, full-page, and element screenshots; GitHub Actions launches the capture on a POSIX cron schedule.

How the workflow fits together

An automatic screenshot system has four stages:

  1. Define the capture: choose a URL, viewport, browser, page state, and whether you need the visible viewport, the entire scrollable page, or one element.
  2. Wait for a reliable state: navigate, then wait for a selector or other page-specific condition rather than guessing a universal delay.
  3. Save and retain the output: use a predictable filename and store files where your team can retrieve them.
  4. Schedule execution: a workflow scheduler starts the script daily, hourly, or at another supported interval.

This separation makes troubleshooting easier: if a file is wrong, inspect the browser script; if a run never starts, inspect the schedule and repository settings.

Choose what to capture

Viewport screenshot

A viewport capture records only what fits in the browser window. It is useful for checking a landing page at a fixed desktop or mobile size.

Full-page screenshot

A full-page capture includes the page’s scrollable content. Playwright can load lazy images while taking a full-page screenshot, but pages that continuously append content may still need a page-specific stopping condition.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Sale
ANNKE 3K Lite Wired Security Camera System Outdoor, 8X 2MP Cameras, 1TB HDD
  • AI Motion Detection 2.0 – Driving AI to the next level, human&vehicle detection and flexible detection area are more accurate than before. For quicker locating in crucial moments, human&vehicle smart searching in recordings offers you great help.
  • Tried-and-True Safe Guard – This one-stop security solution can work with TVI, AHD, CVI, CVBS & IP cameras, the kit includes 1080P cams. The 8CH 3K lite DVR can hook up with 1080P@30fps or 3K/5MP@20fps cams. Therefore, you can also DIY it with other cameras in your home.
  • Reliable 24/7 Continuous Recording – With a pre-installed 1TB HDD(Support up to 10TB HDD), providing 24/7 surveillance recording for you. Upgraded H.265+ saves more storage space and uses less bandwidth, recording videos longer and smoother viewing.
  • Smart Dual-Light Effectively Guard Your Home – This newly upgraded security system offers you a crisp full color night vision, IR mode and color night vision switch flexibly. Once detect intruders, immediate pushes pop up on your phone, securing your peace of mind day&night.
  • Color Night Vision & IP67 Weatherproof – Built-in IR lights and white lights, these cameras can see up to 100ft in B&W night vision, full-color night vision up to 66ft. Rated IP67, these wired cameras can brave all weather, and stand from cold to hot.

Element screenshot

Capture a stable CSS locator when you care about a chart, hero panel, product card, or other component rather than the whole document. Prefer a semantic or data attribute that will not change with layout revisions.

Playwright documents all three scopes, saving directly to a file and returning screenshot bytes for further processing in its screenshots guide.

Build the Playwright capture script

Prerequisites

  • Node.js installed locally or in the runner.
  • A project directory with Playwright installed.
  • A URL the runner can reach, including any required authentication.
  • A page-specific readiness condition, such as a stable selector.

Create a project and install the browser package:

mkdir scheduled-shots
cd scheduled-shots
npm init -y
npm install playwright
npx playwright install chromium

Save this as capture.js. Replace the URL and readiness selector with values from your site.

const { chromium } = require('playwright');
const fs = require('fs');

(async () => {
  const browser = await chromium.launch({ headless: true });
  const page = await browser.newPage({
    viewport: { width: 1440, height: 900 },
    deviceScaleFactor: 1
  });

  try {
    await page.goto('https://example.com', { waitUntil: 'domcontentloaded', timeout: 60000 });
    await page.locator('main').waitFor({ state: 'visible', timeout: 30000 });

    fs.mkdirSync('shots', { recursive: true });
    const stamp = new Date().toISOString().replace(/[:.]/g, '-');
    await page.screenshot({
      path: `shots/home-${stamp}.png`,
      fullPage: true
    });
  } finally {
    await browser.close();
  }
})();

The script waits for main because that is an example of a meaningful page state, not a universally correct condition. If your page renders data after navigation, wait for the data container, a known network completion signal, or a bounded delay documented for that application. Avoid an unbounded wait, which can consume the entire scheduled job.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Sale
aosu D1 Classic 4-Cam Kit, Security Cameras Wireless Outdoor, Solar Powered
  • No Subscription Required with aosuBase: All recordings will be encrypted and stored in aosuBase without subscription or hidden cost. 32GB of local storage provides up to 4 months of video loop recording. Even if the cameras are damaged or lost, the data remains safe.aosuBase also provides instant notifications and stable live streaming.
  • New Experience From AOSU: 1. Cross-Camera Tracking* Automatically relate videos of same period events for easy reviews. 2. Watch live streams in 4 areas at the same time on one screen to implement a wireless security camera system. 3. Control the working status of multiple outdoor security cameras with one click, not just turning them on or off.
  • Solar Powered, Once Install and Works Forever: Built-in solar panel keeps the battery charged, 3 hours of sunlight daily keeps it running, even on rainy and cloud days. Install in any location just drill 3 holes, 5 minutes.
  • 360° Coverage & Auto Motion Tracking: Pan & Tilt outdoor camera wireless provides all-around security. No blind spots. Activities within the target area will be automatically tracked and recorded by the camera.
  • 2K Resolution, Day and Night Clarity: Capture every event that occurs around your home in 3MP resolution. More than just daytime, 4 LED lights increase the light source by 100% compared to 2 LED lights, allowing more to be seen for excellent color night vision.

Viewport, full-page, and element variants

  • Viewport only: remove fullPage: true.
  • Element: use await page.locator('[data-testid="summary"]').screenshot({ path: 'shots/summary.png' });.
  • Image bytes: omit path and assign the returned buffer for upload or comparison.
  • Mobile: create a context with a smaller viewport or use a documented device descriptor, then keep that choice unchanged for every baseline.

For visual comparisons, keep the operating system, browser version, viewport, device scale factor, headless mode, hardware conditions, and power source consistent. Playwright explains why rendering can vary between hosts in its visual comparisons documentation.

Schedule it with GitHub Actions

Put the script and package.json in the repository’s default branch. Then create .github/workflows/screenshots.yml:

name: Scheduled website screenshot

on:
  schedule:
    - cron: '17 7 * * *'
      timezone: 'America/New_York'
  workflow_dispatch:

jobs:
  capture:
    runs-on: ubuntu-latest
    steps:
      - name: Check out repository
        uses: actions/checkout@v4
      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm
      - name: Install dependencies
        run: npm ci
      - name: Install Chromium
        run: npx playwright install --with-deps chromium
      - name: Capture page
        run: node capture.js
      - name: Upload screenshots
        uses: actions/upload-artifact@v4
        with:
          name: website-screenshots-${{ github.run_number }}
          path: shots/
          if-no-files-found: error

The cron expression above means 7:17 a.m. in New York when the timezone field is honored. GitHub’s workflow syntax documentation describes the POSIX cron format and timezone field. Choose a minute other than zero to reduce contention at the start of the hour.

What GitHub’s scheduler guarantees—and what it does not

  • Without timezone, schedules use UTC.
  • A scheduled workflow runs against the latest commit on the default branch.
  • The documented shortest interval is five minutes; use a cron expression such as */5 * * * * only when that frequency is appropriate.
  • High load can delay scheduled events, especially near the beginning of an hour, and queued runs can be dropped.
  • For public repositories, GitHub automatically disables scheduled workflows after 60 days without repository activity.

If a local time crosses daylight-saving changes, consult GitHub’s documented behavior: a schedule landing in a skipped spring-forward hour advances to the next valid time. For compliance or billing evidence, record the actual run timestamp rather than assuming the nominal cron time.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Sale
Blink Outdoor 4 – Wireless smart security camera, two-year battery life, 1080p HD day and infrared night live view, two-way talk. Sync Module Core included – 3 camera system
  • Outdoor 4 is our most affordable wireless smart security camera yet, offering up to two-year battery life for around-the-clock peace of mind. Local storage not included with Sync Module Core.
  • See and speak from the Blink app — Experience 1080p HD live view, infrared night vision, and crisp two-way audio.
  • Two-year battery life — Set up in minutes and get up to two years of power with the included AA Energizer lithium batteries and a Blink Sync Module Core.
  • Enhanced motion detection — Be alerted to motion faster from your smartphone with dual-zone, enhanced motion detection.
  • Person detection — Get alerts when a person is detected with embedded computer vision (CV) as part of an optional Blink Subscription Plan (sold separately).

Make files useful after every run

Names and directories

Include the URL or page name and an ISO-like timestamp in each filename, as the example does. For a single rolling “latest” image, write a second stable filename such as shots/home-latest.png. Keep historical and latest outputs separate so downstream consumers do not accidentally overwrite a baseline.

Retention and access

Decide whether screenshots are temporary build artifacts, committed files, or uploads to your own object storage. Set a retention period that matches your audit or comparison requirement, and restrict pages containing private data. GitHub artifact retention and access are repository settings; do not assume a default period is appropriate for your organization.

Comparisons and notifications

To detect visual changes, compare each capture with a baseline produced in the same environment. A pixel diff can be noisy when fonts, animations, clocks, advertisements, or rotating content change. Disable animations with CSS, freeze test data where possible, and mask dynamic selectors before taking the shot. Add a later workflow step that publishes a diff or opens an issue only when the comparison exits nonzero.

Authentication and dynamic pages

Never hard-code passwords or tokens in capture.js. Store them as GitHub Actions secrets and pass them through environment variables, then create a browser context with the required headers or cookies. If the site has a consent banner, dismiss it in the script before the readiness check. For a page that requires a click to reveal content, perform the click and wait for the revealed selector before capturing.

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

Use bounded timeouts for navigation and selectors. Log the URL, run identifier, viewport, and browser version, but avoid logging cookies or authorization headers. Capture a diagnostic screenshot or HTML only on failure, and protect those artifacts because they may contain private page data.

Rank #4
Sale
ANNKE 8CH H.265+ 3K Lite Wired Security Camera System,4X 2MP Cam, 1TB HDD
  • 【AI Motion Detection 2.0】Driving AI to the next level, human&vehicle detection and flexible detection area are more accurate than before. For quicker locating in crucial moments, human&vehicle smart searching in recordings offers you great help.
  • 【Tried-and-True Safe Guard】This one-stop security solution can work with TVI, AHD, CVI, CVBS & IP cameras, the kit includes 1080P cams. The 8CH 3K lite DVR can hook up with 1080P@30fps or 3K/5MP@20fps cams. Therefore, you can also DIY it with other cameras in your home.
  • 【Reliable 24/7 Continuous Recording】With a pre-installed 1TB HDD(Support up to 10TB HDD), providing 24/7 surveillance recording for you. Upgraded H.265+ saves more storage space and uses less bandwidth, recording videos longer and smoother viewing.
  • 【Smart Dual-Light Effectively Guard Your Home】This newly upgraded security system offers you a crisp full color night vision, IR mode and color night vision switch flexibly. Once detect intruders, immediate pushes pop up on your phone, securing your peace of mind day&night.
  • 【Color Night Vision & IP67 Weatherproof】Built-in IR lights and white lights, these cameras can see up to 100ft in B&W night vision, full-color night vision up to 66ft. Rated IP67, these wired cameras can brave all weather, and stand from cold to hot.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshoot missed or incorrect screenshots

The workflow never starts

  • Confirm the YAML file is on the default branch and the cron syntax is valid.
  • Check that the workflow is enabled and that a public repository has not been inactive for 60 days.
  • Remember that a scheduled event can be delayed or dropped during GitHub load; use workflow_dispatch to test immediately.

Navigation times out

Verify DNS, outbound access, redirects, and the target’s response time. Increase the timeout only after checking the page; an endlessly waiting page should fail clearly. If authentication is required, confirm the secret names and the context’s headers or cookies.

The screenshot is blank or incomplete

Wait for a page-specific selector, not merely domcontentloaded. Scroll or trigger the component that loads lazy content, dismiss overlays, and check whether the page depends on JavaScript blocked by the runner. Save a failure screenshot and console errors to identify the failing stage.

Images or text differ between runs

Pin the Playwright and browser versions, use the same runner image, fix the viewport and scale factor, disable animations, and mask timestamps or rotating modules. Playwright’s visual-comparison guidance explains that host OS, hardware, settings, power source, and headless mode can affect rendering.

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

Several runs overlap

A slow capture can still be running when the next schedule fires. Make the job idempotent, use unique filenames, and add a concurrency policy or external lock so two runs do not overwrite a shared “latest” object.

Best Value
Sale
Blink Video Doorbell + Outdoor 4 – Wireless smart security cameras, head-to-toe HD view, two-year battery life. Sync Module Core included – 3 camera system + Video Doorbell
  • Video Doorbell is our second-generation smart security doorbell with up to two years of battery life, an expanded field of view, and improved security features for more peace of mind, no matter where you are.
  • Last longer with two-year battery life — Experience up to two years of smart security coverage on both devices with included AA Energizer lithium batteries and a Blink Sync Module (included with Outdoor 4).
  • See and speak from the Blink app — Experience head-to-toe HD viewing from Video Doorbell and 1080p HD live view from Outdoor 4 as well as infrared night vision and crisp two-way audio.
  • See more at your door with Blink Video Doorbell — Greet guests and watch packages get delivered, day and night, with head-to-toe HD view and infrared night vision. Use two-way talk to hear and speak through the Blink app.
  • Enhanced motion detection with Outdoor 4 — With our all-new Outdoor 4, enjoy a wider field of view and be alerted to motion faster with dual-zone, enhanced motion detection.

When a managed service is the better fit

Self-hosting gives you control, but you must maintain browser binaries, secrets, storage, retries, schedules, and alerting. Before choosing a hosted service, ask whether it supports your required browser interactions, schedule precision, missed-run handling, retention, access controls, notifications, and total cost. Those capabilities vary by provider and plan.

Or skip the browser setup

ScreenshotNeo provides a website screenshot API and MCP server. It accepts consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each cleanup step can be disabled. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers identify the page verdict and billing status. Its MCP tools—take_screenshot, get_page_info, and capture_pdf—let Claude, Cursor, or another MCP client request captures.

One GET request is enough:

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

Python:

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)

Node.js:

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

See the ScreenshotNeo documentation for the 63 options, including full-page and selector captures, device presets, retina scale, PDF settings, custom CSS or JavaScript, clicks, waits, request blocking, headers, cookies, geolocation, transparent backgrounds, resizing, caching TTLs, signed links, asynchronous webhooks, bulk capture, usage data, and OpenAPI details. Plans include 1,000 free shots per month with no card; paid plans start at $5 for 3,000 shots, and every feature is included on every plan. Create a free ScreenshotNeo account.

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

Practical decision checklist

  • Use Playwright plus GitHub Actions when you need custom browser logic and can operate the runner, artifacts, and secrets.
  • Use a managed API when you want one request, built-in consent cleanup, API-level billing visibility, and an MCP path for AI agents.
  • For either approach, define the page state, keep rendering conditions consistent, name outputs predictably, and plan for delayed or failed runs.

Frequently Asked Questions

Can I schedule screenshots more often than once an hour?

Yes. GitHub Actions documents a five-minute minimum schedule interval, although high load can delay or drop scheduled runs.

Should I use a full-page or viewport screenshot for monitoring?

Use a viewport shot for a fixed visual surface and a full-page shot for content extending below the fold; choose an element shot when only one component matters.

How do I handle a website that requires login?

Pass credentials through encrypted scheduler secrets and create an authenticated Playwright context with headers or cookies; never place credentials in the script.

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.

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.