No selectors to write, no per-site config to maintain. The hard parts are handled by behaviour, not brittle rules.
Detects cookie & consent overlays by behaviour — high z-index, dialog role, consent wording — clicks accept to reveal gated content, then removes stragglers and restores scroll.
SingleFile strips the site's scripts; page-keeper injects a tiny one back. Carousels, sliders and dropdown menus keep working offline — --no-offline-ui to skip.
Every page gets an A–D grade and 0–100 fidelity score — images inlined, no page errors, real content — so you know the copy is faithful, not just that it exists.
Fully non-interactive and exits 0 even when some pages fail. Each run is an isolated, timestamped folder — previous snapshots are never touched.
Canonical dedup, rel=next pagination discovery, tracker & media blocking, and tunable concurrency mean the budget goes to unique, real content.
Transient errors are retried with backoff; a page that keeps failing is recorded as failed — never saved as a "502 Bad Gateway" snapshot masquerading as content.
Fidelity measures how good the capture is; coverage measures how much of the site you got. page-keeper gives you both — plus a log of every action it performed — in one self-contained report.html.
--thumbnails.report.json and manifest.json for every URL you crawl.Drive it from a terminal and cron, or open the web UI, tune every option, and watch each page get exported in real time.
Point it at a URL and walk away. Flags override an optional JSON config; the exit code is cron-friendly.
# one-time setup npm install && npm run build npx playwright install chromium # archive a whole site archive-site https://example.com \ --output ./archives --max-requests 200 \ --thumbnails --extract-text # daily, from cron 0 3 * * * node dist/cli.js https://example.com
A local single-user Next.js dashboard, served from one port. Everything the CLI can do, with a progress bar.
npm run build:frontend
npm run serve # → http://127.0.0.1:4321
One portable .html per page with CSS, images and fonts inlined. Opens in any browser; falls back to MHTML if the inliner is unavailable.
Rendered HTML plus a shared, deduplicated assets/ folder — lighter on disk when pages share resources.
Chromium's native MHTML capture — robust and complete, opens mainly in Chrome.
Turn a single URL into an archive that's browsable, self-contained, and verifiable — and outlives the original.
npm run dev -- https://example.com · no build required