To bulk screenshot WordPress pages, collect the page URLs from the site’s sitemap, filter them to the pages you actually want, then use browser automation to visit each URL and save a screenshot. A sitemap is a starting list—not a guarantee that every entry is unique, current, or in scope. The workflow below uses Playwright and records failures so you can review the whole run.
Find the WordPress sitemap and collect its URLs
Locate the sitemap
For WordPress.com, try adding /sitemap.xml to the site address, such as https://example.com/sitemap.xml. WordPress.com documents that path for its generated XML sitemap in its sitemap guide. Self-hosted WordPress sites can have different sitemap configuration, so inspect the site rather than assuming the same URL or structure. WordPress core provides sitemap functionality, but the actual site may expose an index with child sitemap files.
Open the sitemap URL in a browser or fetch it with a script. If it is a sitemap index, follow the listed child sitemap URLs and collect their page-location entries. The WordPress developer references describe the core sitemap implementation and index: sitemap source file and WP_Sitemaps class.
Choose and normalize the targets
Before capturing, decide what “all pages” means for this job. A sitemap can include posts, pages, archives, or other content types; those are not automatically all useful screenshot targets. Keep URLs for the intended content, check that each belongs to the expected site, and deduplicate equivalent addresses. Where the same content is reachable through multiple URLs, prefer the canonical URL used for search. Google recommends including preferred canonical URLs in a sitemap: Google’s sitemap guidance.
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 reinstall#1 Best Overall
- 16MP Sensor: Captures detailed photos with a CMOS sensor for everyday shooting
- Optical Zoom: 4x optical zoom with a 27mm wide angle lens for flexible framing indoors or outdoors
- Full HD Video: Records 1080p video for travel clips, family moments, or simple vlogging
- Memory Support: Works with Class 10 SD, SDHC, or SDXC cards up to 512GB
- LCD Screen and Battery: 2.7in LCD screen with 2 AA alkaline batteries for convenient on-the-go use
- Exclude attachment pages, feeds, or unwanted post types if they are outside the review scope.
- Decide how to handle query strings, trailing slashes, redirects, and alternate hostnames; do not normalize them blindly if they identify different content.
- Keep a manifest containing each selected URL and its eventual filename. It makes failures, reruns, and review easier to manage.
Set up a repeatable Playwright screenshot run
Install the browser automation dependency
Use a Node.js project with Playwright installed and its browser available. In an existing project, install the package with npm install playwright, then install Chromium with npx playwright install chromium. The example below assumes you save it as an ES module, for example capture.mjs. It expects a text file named urls.txt, with one selected URL per line, and creates a screenshots directory.
Runnable batch example
This script loads the URL list, creates predictable numbered filenames, captures full pages, and writes a CSV manifest with success or failure for each URL. It is a practical starting point: tune readiness, authentication, and filtering to the site being captured.
import { chromium } from 'playwright';
import { mkdir, readFile, writeFile } from 'node:fs/promises';
const urls = (await readFile('urls.txt', 'utf8'))
.split(/r?n/)
.map((line) => line.trim())
.filter(Boolean);
await mkdir('screenshots', { recursive: true });
const browser = await chromium.launch();
const page = await browser.newPage({ viewport: { width: 1440, height: 900 } });
const results = [['number', 'url', 'file', 'status', 'error']];
for (let i = 0; i < urls.length; i++) {
const url = urls[i];
const number = String(i + 1).padStart(4, '0');
const file = `screenshots/${number}.png`;
try {
const response = await page.goto(url, {
waitUntil: 'domcontentloaded',
timeout: 30000
});
if (!response || !response.ok()) {
throw new Error(`Navigation returned ${response?.status() ?? 'no response'}`);
}
await page.screenshot({ path: file, fullPage: true });
results.push([number, url, file, 'ok', '']);
} catch (error) {
results.push([number, url, file, 'failed', String(error)]);
console.error(`Screenshot failed for ${url}:`, error);
}
}
await browser.close();
const csv = results
.map((row) => row.map((value) => `"${String(value).replaceAll('"', '""')}"`).join(','))
.join('n');
await writeFile('screenshots/manifest.csv', csv, 'utf8');
Run it with node capture.mjs. Playwright’s screenshot API accepts a file path, and the extension determines the image format; its full-page option captures the full scrollable page rather than only the current viewport. See the Playwright screenshot guide and Page API.
Rank #2
- 16MP Sensor: Captures detailed photos with a CMOS sensor for everyday shooting
- Optical Zoom: 5x optical zoom with a 28mm wide angle lens for flexible framing indoors or outdoors
- Full HD Video: Records 1080p video for travel clips, family moments, or simple vlogging
- Memory Support: Works with Class 10 SD, SDHC, or SDXC cards up to 512GB
- LCD Screen and Battery: 2.7in LCD screen and a rechargeable lithium-ion battery for on-the-go use
The CSV records status and errors, but not every site-specific detail. If a site redirects pages or returns an HTTP error page that still renders, decide whether those should count as successful captures and extend the manifest to record the final URL, response status, and title.
Choose capture settings for useful comparisons
Viewport or full page
A standard screenshot captures the visible viewport. Use fullPage: true when you need the entire scrollable page in one image. Full-page captures are useful for content review, but long pages can produce very tall images that are harder to inspect and larger to store. Choose viewport shots when comparing above-the-fold layout or when full-page files would be unwieldy.
CSS pixels or device scale
Playwright can capture at CSS-pixel scale or device-pixel scale. CSS scale produces one output pixel per CSS pixel and is generally more compact; device scale preserves the browser’s device-pixel ratio and can create larger, more detailed images. Set the scale deliberately so images from separate runs remain comparable. The screenshot options are documented in the Page API.
Rank #3
- Latest Digital Camera Built-in Fill Light : This compact digital camera is paired with a powerful CMOS processor and image stabilization to help you take & record the most exciting moments in 44 MP quality images & FHD 1080P quality videos anywhere, anytime. Plus, there is also a built-in fill light to help you take high quality pictures even in low light&dark settings, making this the perfect camera for all indoors/outdoors situations.
- Long-Lasting Battery Life & 16X Digital Zoom :This point and shoot camera will retain its battery charge even after long use. The controls and functions are easy to operate making this the perfect choice for children, teens and younger. This kids camera supports 16x digital zoom, you can zoom in or out the subject by pressing the W/T button for taking still photos to zoom in or out on distant objects and capture all the details you need.
- Multifunctional & Portable Digital Camera: This cheap digital camera is slim enough to fit in your pocket. You'll easily be able to take it with you on all your indoor/outdoor activities and adventures and ideal for beginners, children and teenagers. This kids digital camera is equipped with 20 filters, anti-shaking, self-timer, continuous shooting, date stamp, time-lapse recording, smile capture, internal MIC and speaker (recording sound videos), great for your daily photography needs.
- WEBCAM & PAUSE FUNCTION : More than just a FHD 1080p digital camera, it also works as a webcam for video calls and vlogging. Connect the camera to the computer, press shutter and power button at the same time and the camera will automatically turn on webcam mode for all your video calling and live streaming needs. The pause function allows you to pause when seeing playback videos.
- A Must Have Photography Device : This digital camera with SD card made from high-quality materials, this retro camera is safe and durable. Perfect for all ages to develop & improve their photographic abilities and observation skills. Our dedicated and experienced 24/7 support team is available for all after purchase troubleshooting, questions and technical help.
Other useful screenshot options
- File path and type: use explicit extensions such as
.png,.jpeg, or.webpwhere supported by the API, and keep the extension consistent across the batch. - Element capture: use a locator’s screenshot method when you need one component rather than the whole page.
- Masking and styling: masks or screenshot-specific styles can obscure volatile elements or make output more consistent where the page supports suitable selectors.
- Viewport: set a fixed viewport when comparing layouts. Responsive sites may need separate runs at each target viewport.
Handle readiness, login, and changing page content
Wait for the page state that matters
waitUntil: 'domcontentloaded' means the initial document was parsed; it does not guarantee that asynchronous page content, fonts, or lazy-loaded images have finished. Choose a readiness condition that reflects the site: for example, wait for a known content selector, a short bounded delay after navigation, or network idle when the site’s requests eventually settle. Use a timeout and log failures rather than allowing one stalled page to stop the entire run.
Lazy-loaded images may not appear until they approach the viewport. For long pages, test representative pages and inspect the result; if necessary, scroll through the page before capturing and wait for image loads. This behavior is site-specific, so avoid assuming a single wait setting works for every WordPress site.
Recommended Free Tools
Authentication and consent
Private or member-only pages require an authenticated browser context. Use a saved Playwright storage state or sign in through the site before navigating to the URL list. Keep credentials and session files out of source control. Decide whether screenshots should include or dismiss a consent banner; the banner’s behavior and required interactions vary by site. Likewise, popups, chat widgets, rotating promotions, and timestamps can make otherwise identical captures differ.
Control dynamic content
For visual regression or repeatable review, stabilize the environment where possible: use the same viewport, browser version, locale, timezone, and logged-in state. Consider masking selectors for content that changes on each load, or use screenshot styling to hide nonessential elements. A mask improves comparability but should not conceal defects you intend to inspect.
Rank #4
- 16MP Sensor: Captures detailed photos with a CMOS sensor for everyday shooting
- Optical Zoom: 5x optical zoom with a 28mm wide angle lens for flexible framing indoors or outdoors
- Full HD Video: Records 1080p video for travel clips, family moments, or simple vlogging
- Memory Support: Works with Class 10 SD, SDHC, or SDXC cards up to 512GB
- LCD Screen and Battery: 2.7in LCD screen and a rechargeable lithium-ion battery for on-the-go use
Scale the batch safely and troubleshoot failures
Start small, then increase the run
- Run a handful of URLs, including one long page, one page with images below the fold, and any page requiring a login.
- Open the screenshots and manifest. Check filenames, page completeness, redirects, and whether the chosen readiness behavior works.
- Run the remaining URLs after correcting issues. For a large list, process a limited number of pages at a time rather than launching an unbounded number of browsers or tabs.
- Rerun only failed or intentionally updated URLs using the manifest, preserving stable filenames if downstream review depends on them.
Common problems and fixes
- The sitemap URL returns a 404: the site may use a different sitemap path, disable sitemaps, or expose an index elsewhere. Inspect the site’s published sitemap links and configuration rather than assuming
/sitemap.xmlworks on every installation. - Some URLs are missing from the captured set: the sitemap may be an index rather than the final URL list. Follow child sitemaps and verify that your parser reads every location entry.
- Duplicate or unexpected screenshots: filter the sitemap entries to the target content type, deduplicate equivalent URLs, and record redirect destinations to identify alternate paths to the same page.
- Navigation times out: the server may be slow, the page may never reach the selected readiness condition, or a request may be blocked. Increase the timeout only when justified, prefer a more appropriate readiness signal, and keep the failure in the manifest.
- Screenshot is blank or incomplete: check whether navigation succeeded, whether the page needs authentication, and whether client-side content or lazy images need additional waiting or scrolling.
- One failure stops later pages: keep navigation and screenshot work inside a per-URL
try/catch, as in the example, and close the browser in afinallyblock in production code so cleanup still happens after an unexpected error. - Files are too large or hard to review: choose viewport captures instead of full-page captures where appropriate, use CSS scale for compact output, or select a compressed image format supported by the capture API.
Or skip the browser setup
ScreenshotNeo takes a screenshot or PDF through one API request, so you can send your sitemap URLs to a small script without installing and managing a local browser. Its API supports PNG, JPEG, or WebP screenshots, and the same parameter names used by other screenshot APIs also work, which can ease a switch.
For example, this cURL request captures a target URL as WebP. Replace the URL with one of the filtered sitemap entries and supply your API key. See the ScreenshotNeo documentation for the available options and setup details.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com/page -o shot.webp
- Cookie and consent banners, newsletter popups, and chat widgets are removed before capture; each cleanup step can be turned off.
- Bot checks and CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed. The response includes
X-Page-VerdictandX-Billedheaders to indicate the result and billing status. - An MCP server provides
take_screenshot,get_page_info, andcapture_pdftools for Claude, Cursor, and other MCP clients. - The Free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots. Yearly billing gives two months free.
Sign up for ScreenshotNeo’s free plan to try the API with 1,000 screenshots a month and no card.
Frequently Asked Questions
Does a sitemap include every page on a WordPress site?
No. It lists URLs exposed by that sitemap configuration, and may omit pages or include content that is not part of your screenshot scope. Inspect sitemap indexes and filter the entries you need.
Can I save the batch as PDFs instead of images?
Yes. Playwright supports PDF output through its page PDF API in Chromium, but the example here is configured for image screenshots. Set up a separate PDF workflow if you need document output.
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.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →

