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.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

Use two separate pieces: a browser automation script captures the page, and a scheduler launches that script on your chosen interval. A dependable, documented setup is Playwright for screenshots and GitHub Actions for cron-based scheduling. This guide builds that setup, explains timing and rendering pitfalls, and shows a managed alternative when you do not want to maintain a browser runner.

1. Decide exactly what the scheduled capture should contain

Define the capture before writing code. Your choice affects browser memory, file size, and whether visual comparisons are meaningful.

Viewport screenshot

A viewport shot records only what fits in the browser window. Set a fixed width and height when you need a consistent dashboard, mobile breakpoint, or social-card image.

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

Full-page screenshot

Playwright can capture the entire scrollable page with fullPage: true. Long pages can be tall and expensive to store, and lazy-loaded images may not appear unless the page has been scrolled or otherwise triggered to load them.

#1 Best Overall
Sale
Philips 24 Inch Computer Monitor FHD 100Hz VA VESA Flicker-Free, 241V8LB
  • CRISP CLARITY: This 23.8″ Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
  • INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
  • THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
  • WORK SEAMLESSLY: This sleek monitor is virtually bezel-free on three sides, so the screen looks even bigger for the viewer. This minimalistic design also allows for seamless multi-monitor setups that enhance your workflow and boost productivity
  • A BETTER READING EXPERIENCE: For busy office workers, EasyRead mode provides a more paper-like experience for when viewing lengthy documents

One element

Use a stable CSS selector or other locator to capture one chart, product card, or report panel. Element screenshots avoid unrelated navigation changes and usually create smaller files.

Choose an output format and name

PNG is lossless and useful for pixel comparison. JPEG is smaller but introduces compression differences. Use a deterministic directory and a timestamped filename when you need a history, or a fixed filename when another process always consumes the latest image.

2. Create a Playwright capture script

The following Node.js example opens a page, waits for a page-specific readiness signal, and writes a screenshot. Replace the URL and selector with values that are meaningful for your site.

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.
  1. Make a project directory and initialize it: mkdir scheduled-shot && cd scheduled-shot && npm init -y.
  2. Install Playwright: npm install playwright, then download its browser with npx playwright install --with-deps chromium on a Linux runner.
  3. Create capture.js with this script:
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/report', {
      waitUntil: 'domcontentloaded',
      timeout: 60000
    });

    // Replace this with a condition that means the target page is ready.
    await page.locator('[data-report-ready="true"]').waitFor({ timeout: 30000 });

    // Optional: remove a volatile timestamp before visual comparison.
    // await page.locator('.live-clock').evaluate(el => el.textContent = '');

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

The official Playwright screenshot API also supports saving a viewport image, capturing a locator, and returning screenshot bytes instead of writing a file. For an element, replace the page call with await page.locator('#sales-chart').screenshot({ path: 'shots/chart.png' });. For an in-memory pipeline, use const bytes = await page.screenshot();.

Rank #2
Philips 22 Inch Computer Monitor FHD 100Hz VA VESA Flicker-Free, 221V8LB
  • CRISP CLARITY: This 22 inch class (21.5″ viewable) Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
  • 100HZ FAST REFRESH RATE: 100Hz brings your favorite movies and video games to life. Stream, binge, and play effortlessly
  • SMOOTH ACTION WITH ADAPTIVE-SYNC: Adaptive-Sync technology ensures fluid action sequences and rapid response time. Every frame will be rendered smoothly with crystal clarity and without stutter
  • INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
  • THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors

Make the readiness check page-specific

domcontentloaded means the initial document was parsed, not that charts, fonts, or API data are ready. Prefer a selector that appears only after the important content is rendered. If no reliable selector exists, combine a bounded delay with a check for a known heading or value. Avoid an unlimited sleep: it makes failed runs consume the whole job timeout.

Handle authentication and consent deliberately

For private pages, use Playwright’s stored authentication state or inject credentials through encrypted repository secrets; never commit cookies or passwords. If a consent dialog blocks the page, add a locator click before the readiness wait and verify that the dialog is actually gone. A different page state can otherwise produce a valid-looking but incorrect screenshot.

3. Test locally before adding a schedule

  1. Run node capture.js.
  2. Open the generated file and confirm the URL, viewport, scroll extent, fonts, images, and dynamic widgets.
  3. Run it twice. If pixels change for reasons unrelated to the content, identify clocks, rotating ads, animations, random IDs, personalized data, and late-loading resources.
  4. Use a fixed browser version and viewport for comparisons. Playwright explains that rendering can vary with operating system, browser version, settings, hardware, power source, and headless mode; its visual-comparison guidance recommends using the same environment that created the baseline.

4. Schedule the script with GitHub Actions

Create .github/workflows/screenshot.yml. This workflow checks out the default branch’s latest commit, installs Node dependencies and Chromium, runs the capture, and uploads the resulting files as an artifact.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
name: Scheduled website screenshot

on:
  schedule:
    - cron: '17 9 * * *' # every day at 09:17 UTC
  workflow_dispatch:

jobs:
  capture:
    runs-on: ubuntu-latest
    steps:
      - name: Check out source
        uses: actions/checkout@v4
      - name: Set up Node
        uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm
      - name: Install dependencies
        run: |
          npm ci
          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

Use workflow_dispatch to run the same job manually while you tune selectors. The GitHub schedule documentation specifies POSIX cron, a five-minute shortest interval, UTC as the default timezone, and execution from the latest commit on the default branch.

Rank #3
Sale
Dell 24 Monitor - SE2426H - 23.8-inch FHD (1920x1080) 144Hz 1ms Display, in-Plane Switching (IPS) Technology, AMD FreeSync™, TÜV 3-Star 2X HDMI, Tilt
  • Clear visuals. Fluid motion: A 144Hz refresh rate and 1ms MPRT deliver smooth, tear‑free motion across work, gaming, and streaming for clearer, more fluid viewing.
  • Eye comfort: TÜV Rheinland 3‑star* certification reduces harmful blue light while preserving stunning color quality without compromise. *TÜV Rheinland 3-star eye comfort certification.
  • Wide viewing angle: Get consistent views across a wide 178° /178° viewing angle.
  • In-Plane Switching (IPS): See excellent color accuracy and consistency across wide viewing angles with In-plane Switching (IPS) technology.
  • Ultra-thin bezels: Maximize your viewing experience with thin bezels.

Cron examples

Expression Meaning
*/5 * * * * Every five minutes (the documented minimum interval)
0 * * * * At minute zero of every hour
17 9 * * * Daily at 09:17 UTC
30 6 * * 1-5 Weekdays at 06:30 UTC
0 8 1 * * First day of each month at 08:00 UTC

GitHub Actions now supports a timezone field for schedule entries. A timezone-aware example is:

on:
  schedule:
    - cron: '30 8 * * 1-5'
      timezone: 'America/New_York'

Use an IANA timezone name and document whether the business requirement follows local clock time or UTC. GitHub notes that a scheduled time falling in a skipped spring-forward hour advances to the next valid time; daylight-saving transitions therefore need explicit acceptance criteria. See the workflow syntax reference for the current format.

5. Store, retain, and compare the images

Artifacts versus repository commits

Uploading an artifact keeps generated binaries out of Git history and lets you download a run’s files. If you need a permanent archive, copy files to storage you control or commit only deliberately selected baselines. Define a retention policy that matches your compliance and comparison window; do not assume an artifact remains forever.

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

Stable paths and metadata

Include the target name, viewport, and capture time in either the path or a sidecar JSON file. Record the URL, commit SHA, browser version, viewport, and readiness rule. This makes a visual difference explainable instead of leaving an anonymous image.

Rank #4
Samsung 27" Essential S3 (S36GD) Series FHD 1800R Curved Computer Monitor
  • CURVED FOR ENHANCED ENGAGEMENT: An immersive viewing experience with a curved monitor that wraps more closely around your field of vision; It creates a wider view, enhancing depth perception and minimizing peripheral distraction
  • SMOOTH PERFORMANCE FOR SEAMLESS CONTENT: Stay in the action when playing games, watching videos, or working on creative projects; The 100Hz refresh rate reduces lag and motion blur so you don't miss a thing in fast-paced moments¹
  • MORE GAMING POWER: Gain the edge with optimizable game settings; Color and image contrast can be adjusted to see scenes more vividly and spot enemies hiding in the dark; Game Mode adjusts any game to fill the screen so you can view every detail²
  • KEEP IT EASY ON THE EYES: Care for your eyes and stay comfortable, even during long sessions; Advanced eye comfort technology certified by TÜV reduces eye strain by minimizing blue light and reducing irritating screen flicker²
  • INCREASED VERSATILITY: Connect to more; Plug devices straight into your monitor for increased flexibility, making your computing environment even more convenient

Detect a meaningful change

A screenshot alone does not tell you whether a change is expected. Add a comparison step that produces a diff and fails the workflow only when its threshold is exceeded. Mask known volatile regions, or capture a stable element rather than the whole page. Keep the baseline and scheduled run on the same runner image and browser version.

6. Reliability limits you should design around

  • Runs can be late. GitHub says scheduled events may be delayed during periods of high load, especially near the start of an hour.
  • Queued runs can be dropped. A cron expression is a request to enqueue work, not a guarantee that every occurrence produces an image.
  • Inactive public repositories can stop scheduling. GitHub documents automatic disabling of scheduled workflows in public repositories after 60 days without repository activity. Plan a re-enable check or add periodic repository activity if that policy fits your project.
  • The target can change independently. A successful HTTP navigation can still show an error page, bot challenge, empty state, or partially rendered application. Assert the title, a content selector, and (where practical) an expected status before saving.
  • Long pages consume resources. Full-page captures and large device scale factors increase memory and file size. Use an element or viewport shot when the business question does not require the entire document.

7. Troubleshoot common failures

Symptom Likely cause Fix
Workflow never starts Invalid cron, workflow not on the default branch, or a disabled schedule Validate YAML, run workflow_dispatch, check the Actions page, and review the 60-day inactivity rule for public repositories.
Image is blank or an error page Navigation succeeded but application rendering or a bot check did not Assert a content selector and page title; increase a bounded timeout; investigate authentication and access restrictions.
“Locator not found” timeout Selector is wrong, content is personalized, or data has not loaded Inspect the page locally, choose a stable attribute, and wait for the actual ready state.
Fonts or layout differ from baseline Different OS, browser, scale, or headless environment Pin the runner/browser and viewport and regenerate the baseline in that same environment.
Images missing in full-page output Lazy loading waits for scrolling or intersection events Scroll through the page before capture, wait for image completion, or capture after the page’s own “loaded” marker.
Job times out Slow target, unlimited waits, or expensive browser installation Set navigation and locator timeouts, use dependency caching, and avoid unnecessary full-page or high-scale captures.
Too many artifacts High-frequency schedule and no retention plan Use a retention rule, downsample schedules, or send only diffs/alerts to long-term storage.

8. When a managed screenshot API is a better fit

Run Playwright yourself when you need custom browser logic, private network access, or complete control over files and credentials. Evaluate a hosted service when maintaining browser binaries, runners, retries, storage, and alerting is more work than the screenshots are worth. Ask any provider about schedule precision, missed-run retries, browser interactions, retention, access controls, regional execution, and total cost; those capabilities vary by vendor and plan.

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 is a website screenshot API and MCP server. One GET request returns a PNG, JPEG, WebP, or PDF, while its capture pipeline accepts consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets before the shot. Each step can be disabled. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and the response identifies the result with X-Page-Verdict and X-Billed headers.

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

Get an API key, then call the endpoint (the ScreenshotNeo documentation lists all options):

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)
r.raise_for_status()
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}`);
if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);
const fs = require('fs');
fs.writeFileSync('shot.webp', Buffer.from(await res.arrayBuffer()));

Schedule any of these commands with GitHub Actions, cron on a server, or your existing job system. ScreenshotNeo also provides an MCP server with take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients. Its options include full-page and CSS-selector captures, dark mode, device presets and custom viewports, retina scale, PDF paper and page controls, custom CSS and JavaScript, pre-capture clicks, waits, request/resource blocking, headers, cookies, user agents, authorization, timezone and geolocation, transparent backgrounds, resizing, chosen cache TTLs, signed public-image links, asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, a usage API, and an OpenAPI specification. Common screenshot-API parameter names also work when switching.

Best Value
Sale
Sceptre New 22-Inch Gaming Monitor, FHD 1080p, Up to 144Hz, HDMI, DisplayPort, Built-in Speakers, Machine Black (E225W-FW144 Series, 2026)
  • 【INTEGRATED SPEAKERS】Whether you're at work or in the midst of an intense gaming session, our built-in speakers provide rich and seamless audio, all while keeping your desk clutter-free.
  • 【EASY ON THE EYES】 Protect your eyes and enhance your comfort with Blue-Light Shift technology. This feature reduces harmful blue light emissions from your screen, helping to alleviate eye strain during long hours of use and promoting healthier viewing habits.
  • 【WIDEN YOUR PERSPECTIVE】Our sleek minimal bezel design ensures undivided attention. The nearly bezel-free display seamlessly connects in a dual monitor arrangement, delivering an unobstructed view that lets you focus on more at once, completely distraction-free.
Plan Included screenshots Price
Free 1,000 per month $0, no card
Starter 3,000 $5
Growth 15,000 $15
Pro 60,000 $39
Scale 250,000 $99
Business 1,000,000 $249

Yearly billing gives two months free, and every feature is included on every plan. Sign up free for 1,000 screenshots a month with no card.

9. A practical decision checklist

  • Is the target public, authenticated, or behind a private network?
  • Do you need a viewport, full page, or one stable element?
  • What exact selector proves that data is ready?
  • Should the schedule follow UTC or an IANA local timezone?
  • How will you handle late or dropped runs?
  • Where will images and metadata be retained, and for how long?
  • Can the capture environment remain identical to the visual baseline?
  • Would browser maintenance cost more than an API call?

Frequently Asked Questions

Can I schedule a screenshot every five minutes?

GitHub Actions documents five minutes as the shortest schedule interval. Under load, a run can still be delayed or dropped, so use a runner with stronger timing guarantees when every interval is operationally critical.

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

Does a scheduled workflow run the code on my laptop?

No. GitHub schedules run on a GitHub-hosted or self-hosted Actions runner. The workflow checks out the default branch’s latest commit unless your job explicitly selects another revision.

How do I keep credentials out of screenshots and logs?

Store secrets in the repository or organization secrets store, pass them to the process as environment variables, and avoid printing URLs that contain tokens. Never commit authentication state files.

What is the simplest way to capture only a chart?

Wait for the chart’s stable locator and call that locator’s screenshot method instead of using a full-page capture. This also reduces unrelated layout changes.

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.

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