Free tools Windows power users keep installed
One-click scans. No signup required.
To save a WordPress screenshot every week, combine a browser capture with a weekly scheduler. Use Playwright when you want control over the browser and screenshot file; use WP-Cron for a simple site-integrated schedule, a real server cron or GitHub Actions when timing must not depend on site visits, or a screenshot API if you would rather not maintain a browser runtime. The right choice depends on your hosting access and how reliably the job needs to run.
How the weekly screenshot workflow works
There are two separate jobs: render and capture the page, then launch that capture on a weekly schedule. A scheduler does not take the screenshot by itself; it starts a script or calls a service that does.
As an Amazon Associate I earn from qualifying purchases.
- Choose what to capture: a page URL and whether you need the visible viewport, the full page, or one element.
- Choose a capture method: a browser automation script such as Playwright, or a managed screenshot service.
- Choose where and when to run it: WP-Cron, hosting-provider server cron, or an external workflow such as GitHub Actions.
- Save and verify: use a date or run timestamp in the filename, then confirm a scheduled run created the expected file.
For meaningful week-to-week comparisons, keep the URL, viewport, browser, and page state consistent. Responsive breakpoints, rotating content, login state, cookie banners, and delayed or lazy-loaded elements can all change what appears in a capture. Playwright’s screenshot documentation describes its capture options at playwright.dev/docs/screenshots.
Choose a scheduler that fits your hosting
| Scheduler | Reliability and timing | Hosting access and upkeep | Where the screenshot goes |
|---|---|---|---|
| WP-Cron | Runs due events when WordPress receives requests, so low traffic can delay execution. | Integrated with WordPress; requires a small plugin or theme-level code and a working site request. | Where the capture code writes it, such as the server filesystem or remote storage. |
| Host server cron | Can run on its configured schedule without waiting for a visitor request; exact behavior depends on the host. | Requires hosting control-panel or shell access and a command that the host can run. | Usually the host filesystem unless the script uploads it elsewhere. |
| GitHub Actions or another external scheduled workflow | Runs from an external workflow scheduler; execution and timing depend on that platform and configuration. | Requires a repository workflow and secure handling of secrets; browser dependencies must be installed by the workflow. | The workflow environment by default; upload or publish artifacts if they need to persist or be accessed elsewhere. |
| Managed screenshot service | The provider performs the capture when called; schedule it using an available scheduler or integration. | Avoids maintaining a local browser runtime, but depends on the provider’s capabilities and terms. | Often an API response or provider-defined storage and delivery path; check the chosen service’s current options. |
WP-Cron: easiest when some timing drift is acceptable
WordPress’s wp_schedule_event() can register a recurring event with a timestamp, recurrence, hook, and optional arguments. The weekly recurrence is named weekly. The event’s callback can launch or request the capture process, but the screenshot logic still has to be implemented.
WP-Cron is request-triggered, not a continuously running system daemon. WordPress Developer Resources puts it plainly: “WP-Cron does not run constantly as the system cron does; it is only triggered on page load.” See WordPress: Introduction to WordPress Cron. On a quiet site, a due task may not run until a later request arrives. Do not treat its scheduled timestamp as a guaranteed execution time.
#1 Best Overall
- Massive capacity, up to 22TB capacity. (1TB = one trillion bytes. Actual user capacity may be less depending on operating environment.).Specific uses: Personal
- Includes software for device management and backup with password protection (Download and installation required. Terms and conditions apply. User account registration may be required.)
- 256-bit AES hardware encryption
- SuperSpeed USB (5 Gbps); USB 2.0 compatible
- Trusted storage built with WD reliability
Server cron: better when the host gives you access
A real server cron job can start a script on its own schedule rather than waiting for a visitor to trigger WP-Cron. This is generally the better fit when the website has little traffic or the run should happen near a particular time. The exact UI, command environment, and minimum scheduling interval vary by hosting provider; use the host’s current documentation and test the command under the same account and environment as the scheduled job.
External workflow: useful when you do not control the web server
GitHub Actions can run browser workflows on a schedule, and the WordPress Playground guide documents this kind of workflow. It is a developer-friendly option if your capture script and dependencies live in a repository. You will need to decide how to install Playwright’s browser, provide any credentials securely, and retain or upload the output; repository setup and artifact storage depend on your environment. See WordPress Playground: Running in the browser and beyond.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →WordPress.com server cron is plan-specific
WordPress.com documents separate server cron jobs with weekly scheduling for sites on the Business plan or higher. That availability statement applies to WordPress.com, not to self-hosted WordPress or other hosts. Check the current plan and account documentation before building around it: WordPress.com support: Cron jobs.
Capture with Playwright and schedule the script
The following Node.js example captures the full page to a PNG. It assumes Node.js and Playwright are installed in the environment that runs it, and that the target page is publicly accessible. It is an implementation pattern, not a turnkey WordPress plugin or a workflow validated for every host.
Install Playwright
npm init -y
npm install playwright
npx playwright install chromium
Create a capture script
Save as capture.mjs. The script uses a timestamped filename, waits for the page to load, and gives the page time to settle before capturing. Change the URL, viewport, wait condition, and screenshot type to suit the page. If a site needs authentication, do not put credentials directly in source code.
Rank #2
- USB 3.1 Gen 1 interface
- Up to 2TB storage capacity
- Three-stage shock protection system
- One-touch auto backup button
- Offers Transcend Elite data management software and RecoveRx data recovery software
import { chromium } from 'playwright';
import { mkdir } from 'node:fs/promises';
const targetUrl = process.env.TARGET_URL ?? 'https://example.com/';
const outputDir = process.env.OUTPUT_DIR ?? './screenshots';
const stamp = new Date().toISOString().replaceAll(':', '-');
const outputPath = `${outputDir}/wordpress-${stamp}.png`;
await mkdir(outputDir, { recursive: true });
const browser = await chromium.launch({ headless: true });
try {
const page = await browser.newPage({
viewport: { width: 1440, height: 1000 },
deviceScaleFactor: 1,
});
await page.goto(targetUrl, { waitUntil: 'networkidle', timeout: 60000 });
await page.screenshot({ path: outputPath, fullPage: true });
console.log(`Saved ${outputPath}`);
} finally {
await browser.close();
}
networkidle may not be suitable for pages with persistent network activity; if the navigation times out, use a more appropriate readiness signal, such as waiting for a known selector or using domcontentloaded followed by a targeted wait. To capture only the current viewport, omit fullPage: true. To capture one element, locate it and call its screenshot() method instead. Playwright’s official guide covers page and element screenshots at playwright.dev/docs/screenshots.
Schedule it weekly
Pick one scheduler, rather than stacking several schedules that might create duplicate files.
- Server cron: configure the host’s cron UI or crontab to run the script’s Node.js command once per week. Use absolute paths for Node.js, the script, and the output directory; scheduled jobs often have a different working directory and environment from an interactive shell. Check your host’s instructions for the exact syntax and supported schedule.
- GitHub Actions: add a workflow that checks out the repository, installs Node.js and Playwright with Chromium, runs
capture.mjs, then uploads the screenshot as an artifact or sends it to storage you control. Configure a weekly schedule in the workflow. GitHub’s scheduler runs in UTC, and workflow execution may be delayed; choose the schedule with that in mind and check the current GitHub Actions documentation for syntax and artifact retention behavior. - WP-Cron: register a weekly event using
wp_schedule_event()and attach a callback that starts the capture process or calls a capture endpoint. This requires an environment where launching that process is permitted. Avoid long-running browser work inside a normal page request; it can exceed request limits or interfere with site performance. For more dependable triggering, configure a host cron to invoke WordPress’s cron runner according to your host’s guidance.
WordPress’s API requires the first run timestamp, recurrence name, hook, and optional arguments. Register the event once, avoid scheduling duplicates, and clear it when the code or plugin is removed. The official function reference is wp_schedule_event().
Store and check the result
A scheduled job’s local disk may be temporary, especially in an external workflow. Decide whether files should remain on the web host, be uploaded to object storage, or be retained as workflow artifacts. Use a predictable directory and a timestamped name so a later run does not silently overwrite the previous week’s image. After the first scheduled execution, check the scheduler’s run log, the process exit status, and the destination file; also open the image to verify it is not a blank or partially loaded page.
Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server for developers. One GET request can return a PNG, JPEG, WebP, or PDF; pair the request with the weekly scheduler you choose. This Node.js example writes a screenshot response to a timestamped file. Create an API key and see the available parameters in the ScreenshotNeo documentation.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsRank #3
- Ultra Slim and Sturdy Metal Design: Merely 0.47 inch thick. ABS Plastic+Aluminum external hard drive,with aluminum finish-style.shockproof, anti-pressure, ultra slim and portable
- Ultra-fast Data Transfers: USB 3.0 Super speed 10Gbps transfer rate ultra slim and light weight Portable external hard drive.Runs straight from a usb 3.0 or usb 2.0 port no external power source needed
- System Compatible: Compatible with Windows, Vista, Mac, Linux, Android, Chromebook, and TV, PC, Laptop, PS4, Xbox series consoles and so on
- Plug and Play: With no software to install, just plug it in and the drive is ready to use.Ideal extra storage for your computer and game console
- Package Contents: 1 x portable hard drive, 1 x USB 3.0 cable, 1 x USB to type C adapter, Gift-type shell packaging, shell packaging, three-year manufacturer's warranty and free technical support services
const targetUrl = 'https://example.com/';
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: targetUrl });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot request failed: ${res.status}`);
const bytes = Buffer.from(await res.arrayBuffer());
const stamp = new Date().toISOString().replaceAll(':', '-');
await import('node:fs/promises').then(({ writeFile }) =>
writeFile(`wordpress-${stamp}.webp`, bytes)
);
ScreenshotNeo accepts cookie or consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each of those steps can be turned off. Only clean shots are billed: bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, and response headers identify the page verdict and billing status. Its MCP server includes take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000 shots. Sign up for ScreenshotNeo’s free plan.
Troubleshoot missed runs and bad captures
- The WP-Cron event is late: WordPress checks due events on page loads, so low traffic can leave one waiting. Use a host cron or external scheduled workflow if that delay is unacceptable.
- The script works manually but not on schedule: cron may use a different working directory, PATH, Node.js version, permissions, or environment variables. Use absolute paths, log standard output and errors, and confirm the scheduled account can access the script and output location.
- The browser cannot launch: install the browser binaries required by Playwright in the execution environment and check that the host permits them. A serverless or restricted host may not support a local browser runtime; move capture to an external workflow or use an API.
- The navigation times out: the site may never reach the chosen wait condition, or network activity may stay open. Increase the timeout only if appropriate; otherwise wait for a meaningful selector or a shorter lifecycle event and confirm the screenshot still captures the finished content.
- The image is blank or incomplete: check whether the URL redirects, requires login, blocks automated browsers, or loads content after the capture. Wait for a visible page element or a suitable delay, and verify credentials and page state without exposing secrets in logs.
- The output disappears or overwrites last week’s image: confirm the destination persists between runs and that each filename includes a timestamp. Upload the image to durable storage or configure artifact retention where the workflow runs.
- The captures differ even though the page did not change: standardize viewport, browser, device scale, URL, authentication, consent state, and waits. Dynamic advertisements, timestamps, personalized content, and rotating modules can still vary.
Cost, performance, and access considerations
A local Playwright run has no per-capture service charge described here, but it uses compute, browser storage, and maintenance time; some hosting plans prohibit or constrain browser processes. Keep browser work out of a user-facing request where possible, use timeouts and logs, and remove old screenshots or send them to storage with an explicit retention policy. A hosted service reduces browser-runtime upkeep, but check the current response formats, limits, storage behavior, and terms before choosing one.
For private or authenticated pages, treat cookies, authorization headers, and API keys as secrets. Store them in the scheduler’s secret facility or protected environment variables, restrict access, and do not include them in source control, filenames, or routine logs. A screenshot can contain personal or confidential information, so protect the output destination as carefully as the credentials used to reach it.
Frequently Asked Questions
Can WP-Cron guarantee that a screenshot runs at the exact same time every week?
No. It checks scheduled events when WordPress gets a request, so a low-traffic site may run the event late.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Can I use the same approach for a private WordPress page?
Yes, if the capture process can authenticate, but credentials and resulting screenshots need secure handling.
Quick Recap
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.




