Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallUse a browser automation script to capture the page, a scheduler to run it daily, and dated storage with a separate backup to keep the record. A practical self-managed setup is Playwright plus GitHub Actions: Playwright renders screenshots and PDFs; the workflow starts the script. Keep the target, viewport, browser and capture scope consistent so changes between records are easier to interpret.
Choose what each daily record should capture
Decide whether you need the visible viewport, the entire scrollable page, or a particular element. Playwright supports viewport and full-page screenshots through its page screenshot API; its CLI also supports targeting an element. The choice affects what the archive can show: a viewport is a snapshot of what a visitor sees at that scroll position, while a full-page image includes the page’s scrollable content.
As an Amazon Associate I earn from qualifying purchases.
- Record the target URL or URLs.
- Set a fixed viewport width and height, browser engine and, if relevant, device scale factor.
- Choose viewport, full-page or element capture.
- Decide whether the PDF should reflect print styling or screen styling.
- Wait for a meaningful page-specific readiness condition when content loads asynchronously.
A fixed delay can be too short on a slow day and unnecessarily long on a fast one. Prefer a condition that indicates the content you care about is ready, with a timeout so a stalled page does not hang indefinitely. The correct selector depends on the site.
Build a Playwright capture script
Install Playwright in a Node.js project and install its Chromium browser. Save the following as capture.mjs; it writes a full-page PNG and a PDF for the configured URL under a date-based directory. Replace the URL and readiness selector with values appropriate to the site. The script uses UTC for its archive date and timestamp.
#1 Best Overall
- Scanner type: Document
- Connectivity technology: USB
- With Auto Scan Mode, the scanner automatically detects what you're scanning
- Digitize documents and images
import { chromium } from 'playwright';
import { mkdir } from 'node:fs/promises';
const url = process.env.TARGET_URL ?? 'https://example.com';
const readySelector = process.env.READY_SELECTOR;
const viewport = { width: 1440, height: 900 };
const now = new Date();
const date = now.toISOString().slice(0, 10);
const timestamp = now.toISOString().replaceAll(':', '-');
const outputDir = `archive/${date.slice(0, 4)}/${date.slice(5, 7)}/${date.slice(8, 10)}`;
await mkdir(outputDir, { recursive: true });
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage({ viewport });
try {
const response = await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 60000 });
if (readySelector) {
await page.locator(readySelector).waitFor({ state: 'visible', timeout: 30000 });
}
const stem = `${outputDir}/site-${timestamp}-1440x900`;
await page.screenshot({ path: `${stem}.png`, fullPage: true });
await page.pdf({ path: `${stem}.pdf`, format: 'A4', printBackground: true });
console.log(JSON.stringify({
requestedUrl: url,
finalUrl: page.url(),
status: response?.status() ?? null,
capturedAt: now.toISOString(),
viewport,
screenshot: `${stem}.png`,
pdf: `${stem}.pdf`
}));
} finally {
await browser.close();
}
From the project directory, install the dependency and browser, then run the script:
npm install playwright
npx playwright install chromium
TARGET_URL='https://example.com' READY_SELECTOR='main' node capture.mjs
Use a selector that actually exists on the target page, or omit READY_SELECTOR if navigation completion is sufficient. The example treats a missing HTTP response (for example, a navigation that does not produce one) as unknown status rather than as a successful status. For a production archive, consider making non-success HTTP status codes or missing expected content a failed run, so they are visible in the scheduler’s logs.
Capture the visible viewport or a specific element
For only the current viewport, change the screenshot call to await page.screenshot({ path: `${stem}.png` });. For a single element, use a locator screenshot, for example await page.locator('main').screenshot({ path: `${stem}.png` });. Select a stable site-specific selector; generic selectors may capture the wrong region or fail after a redesign.
Choose PDF rendering deliberately
page.pdf() uses print CSS media by default. That is usually appropriate for a printable document, but print styles can rearrange or omit screen content and color adjustment can change appearance. If you want the PDF to use screen media styles, call await page.emulateMedia({ media: 'screen' }); immediately before page.pdf(). Inspect a sample PDF before relying on daily output. Keep the PNG too if visual fidelity matters: a PDF and screenshot are different renderings, not pixel-identical copies.
Rank #2
- PORTABLE SCANNER FOR USE ON-THE-GO — The fastest and lightest mobile single-sheet-fed compact document scanner in its class¹
- QUICK DOCUMENT SCANNING ― This Epson ultra-fast scanner scans a single page as quickly as 5.5 seconds²; Windows and Mac compatible
- VERSATILE PAPER HANDLING ― Portable scanner scans documents up to 8.5 x 72 in; Also easily digitizes receipts and ID cards to make accounting, bookkeeping, and organizing simpler
- INTUITIVE, HIGH-SPEED SOFTWARE — Epson ScanSmart Software³ is a smart tool allowing you to easily scan, review, and save; Stay organized easily with the help of this Epson scanner
- EASY SETUP — USB-powered connect to your computer for quick and simple scanning; No batteries or external power supply required to operate portable document scanner; Standard Connectivity: USB 2.0
Schedule the capture once per day with GitHub Actions
GitHub Actions runs the capture script when a schedule event triggers the workflow. Add .github/workflows/daily-capture.yml to the repository’s default branch. This example schedules a run at 07:17 UTC every day and uploads each run’s archive directory as a workflow artifact.
name: Daily website archive
on:
schedule:
- cron: '17 7 * * *'
workflow_dispatch:
jobs:
capture:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npm ci
- run: npx playwright install --with-deps chromium
- name: Capture page
env:
TARGET_URL: ${{ vars.TARGET_URL }}
READY_SELECTOR: ${{ vars.READY_SELECTOR }}
run: node capture.mjs
- name: Upload archive files
uses: actions/upload-artifact@v4
with:
name: website-archive-${{ github.run_id }}
path: archive/
if-no-files-found: error
Commit a lockfile so npm ci installs the dependency versions recorded by the project. Configure TARGET_URL and, optionally, READY_SELECTOR as repository variables under the repository’s Settings. Review the workflow permissions and artifact retention settings in GitHub before relying on artifacts as long-term storage.
Understand schedule timing and limits
GitHub schedule expressions use five cron fields. The example 17 7 * * * means 07:17 each day in the schedule’s applicable timezone; UTC is the default, and GitHub also documents support for an IANA timezone. Scheduled workflows run using the latest commit on the default branch. GitHub warns that scheduled runs can be delayed during high load, and queued jobs may be dropped when load is sufficiently high. Scheduling away from the top of the hour can reduce exposure to peak scheduling demand, but it does not guarantee an exact start time. Public-repository schedules are automatically disabled after 60 days without repository activity. See GitHub’s schedule event documentation before depending on this for a critical record.
Keep files organized and verify the archive
The script creates a predictable archive/YYYY/MM/DD/ structure and names each file with the UTC capture timestamp and viewport. This avoids overwriting the prior day’s files. For multiple pages, include a sanitized page name in each filename.
Rank #3
- FAST SPEEDS - Scans color and black and white documents a blazing speed up to 16ppm (1). Color scanning won’t slow you down as the color scan speed is the same as the black and white scan speed.
- ULTRA COMPACT – At less than 1 foot in length and only about 1. 5lbs in weight you can fit this device virtually anywhere (a bag, a purse, even a pocket).
- READY WHENEVER YOU ARE – The DS-640 mobile scanner is powered via an included micro USB 3. 0 cable allowing you to use it even where there is no outlet available. Plug it into you PC or laptop and you are ready to scan.
- WORKS YOUR WAY – Use the Brother free iPrint&Scan desktop app for scanning to multiple “Scan-to” destinations like PC, Network, cloud services, Email and OCR. (2) Supports Windows, Mac and Linux and TWAIN/WIA for PC/ICA for Mac/SANE drivers. (3)
- OPTIMIZE IMAGES AND TEXT – Automatic color detection/adjustment, image rotation (PC only), bleed through prevention/background removal, text enhancement, color drop to enhance scans. Software suite includes document management and OCR software. (4)
Store a manifest or run log with the requested URL, final URL, capture time, browser/version, viewport, HTTP outcome and output filenames. It helps distinguish a real page change from a redirect, incomplete load or failed capture. Review the Actions run history for missed days and failures; a successful workflow status alone does not prove the intended page content appeared in the file.
- Use artifacts for convenient retrieval during their configured retention period, not as an assumed permanent archive.
- For a small history, committing files to a repository makes changes reviewable, but frequent large images and PDFs can make the repository grow quickly.
- Keep a second copy separately from the account or machine that runs the job if the records matter, and periodically open files from that copy.
A PDF and screenshot preserve rendered output, not the complete website or its interactive behavior. If you need broader offline web preservation, ArchiveBox documents formats including HTML, PDF, PNG and WARC. Each format preserves different aspects; none guarantees every interactive feature can later be recreated. Its cited manual is for release 0.4.17, so consult the project’s current documentation rather than treating older installation instructions as current: ArchiveBox documentation.
Or skip the browser setup
ScreenshotNeo is a website screenshot API with an MCP server. A single GET request can return an image or PDF, so a scheduled job can call it instead of maintaining a local browser. The endpoint and options are documented at ScreenshotNeo API documentation.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minuteExample cURL call for an image:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
In your scheduled workflow, store the API key as a secret rather than putting it in the script or repository. The call above captures on invocation; use the same scheduler approach described earlier to run it daily, and choose an output path that includes the capture date so each run is retained.
Rank #4
- Note: No software installation is required. You need 2 AA batteries ( not included) and a memory card ( included) to use it directly. Scan mode: Press and hold "Scan" for 2 seconds to turn on the device, and then press "Scan", the green light is on. The scanner moves to scan the file until the green light turns off automatically (or press the "Scan" key and the green light goes out). The number shown on the display increases by 1 to indicate that the scan is complete.
- Portable Scanner scans images or pictures quickly: Store JPEG/PDF files within seconds, scan images or pictures quickly, plug and play, no need any software preinstalled. Compatible with Windows XP/7/Vista/Mac OS 10.4 or above version.
- Lightweight and travel-friendly: Stored in Micro SD card directly, support read data on your computer or phone with USB connected. Powered by 2pcs AA batteries, Compact Design, it is convenient to carry outside.
- 3 Image Resolution: 3 modes of resolution for your options: 300dpi/600dpi/900dpi, you can save it at the clearest way, picture and document are showed clear as it is. Freely choose your favorite resolution.File Format: JPEG/PDF format is all available, Great storage capacity as it supports 32G Micro SD card(Included 16GB Card),total meet your need for business trip or daily use.
- Widely Used: It is applicable in bank, insurance business, real estate agency,home, office, library or outdoors. suitable for lawyer, businessmen, students, travelers and amateur archivists. Scan your important files and save them immediately, no struggling in finding a printing shop, keep it confidential.
- Cookie banners and more than 60 known consent platforms, newsletter popups and chat widgets are removed before capture; each step can be turned off.
- Bot checks or CAPTCHAs, blank pages, timeouts, failed loads and cache hits are not billed; the response includes
X-Page-VerdictandX-Billedheaders. - An MCP server provides
take_screenshot,get_page_infoandcapture_pdftools for AI agents, including Claude, Cursor and other MCP clients. - The Free plan includes 1,000 shots a month with no card; paid plans start at $5 for 3,000 shots. Every feature is on every plan.
Sign up for ScreenshotNeo’s free plan to start with 1,000 screenshots a month and no card.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Troubleshoot missed or misleading captures
The workflow did not run at the expected minute
Scheduled runs are not exact-time guarantees. Check the workflow run history, confirm the workflow file is on the default branch, and verify the cron expression and timezone. If the repository is public and inactive, check whether the schedule was disabled after 60 days without activity.
The capture failed while waiting for a selector
Confirm that the selector exists at the requested URL and becomes visible within the timeout. A page redesign, consent prompt or conditional content can make an old selector invalid. Choose a page-specific readiness condition and inspect the run log; increasing a timeout will not fix a selector that never appears.
The PDF looks different from the screenshot
Check whether print CSS is responsible. Playwright’s PDF export defaults to print media; emulate screen media before export if screen styles are needed. Review colors and page breaks in an actual generated PDF, and retain a PNG when you need a separate visual record.
Best Value
- 【Easy to Carry--Portable Scanner】Length: 9.5 in = 1.5 pens. Weight: 0.66 lbs = An apple. Carry way: Small bag. Power Source: a pair of AA batteries (NEED TO BUY EXTRA). Support scanning up to A4 size.
- 【Easy to Scan--Handheld Scan】Portable Scanner scans your photos, documents, and book pages in 3-5 seconds on 900 dpi resolution independently. Easy to use once you take a tiny bit of time to get the hang of this portable scanner. Compared to the feeding scanner, the wand scanner will not fold or damage old photos during scanning.
- 【Easy to use--No Driver】Portable Scanner does not require downloading a driver. Easily connect the portable scanner to a computer through a USB cable to transfer your scanned photos or documents anywhere and anytime.
- 【Easy to Digitalize--Clear Image】The highest 900dpi scan resolution can convert pictures, documents, book pages, or other targets into digital files in high clarity.
- 【Easy to Store--16G SD Card】Wand scanner with 16G SD card will store thousands of scan files. With OCR software (you can find some software from Google Play Store), easy to transfer PDF scan files into Word/Excel format and edit them.
The archive has a missing day or a failed artifact upload
Inspect the Actions run and upload step, including whether the capture produced files. The workflow sets if-no-files-found: error so an empty archive is not silently treated as a successful upload. Check repository permissions, artifact configuration and retention settings; use an independent backup for records you cannot afford to lose.
The stored capture shows a redirect or an error page
Compare the requested URL, final URL and HTTP status in the run output. Confirm that the destination is still correct, the expected content appeared, and any required access conditions are handled appropriately. A written file is not proof that it contains the intended page.
FAQ
Can GitHub Actions guarantee that the screenshot is taken at an exact time?
No. GitHub documents possible schedule delays during high load and dropped queued runs under sufficiently high load.
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Does a PDF preserve a website for later interactive use?
No. It is a rendered document; it does not preserve the site’s complete underlying content or interactive behavior.
Should I save both a screenshot and a PDF?
Save both when you need a visual record and a document suitable for reading or printing. They can render differently, so inspect both formats for the page and purpose you care about.
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.




