Free tools Windows power users keep installed
One-click scans. No signup required.
Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.
PHP does not render a modern website by itself. To take a website screenshot, have PHP control a real browser (or a rendering service), navigate to the page, wait for the state you need, and save the resulting image. For new browser automation, Playwright PHP is the most complete option in the reviewed documentation; chrome-php/chrome offers direct Chromium control, while Spatie Browsershot provides a higher-level wrapper.
What a PHP screenshot actually captures
A screenshot is a bitmap of a rendered browser state, not an HTTP response. The browser must execute JavaScript, apply CSS, load fonts and images, and reach the state you intend to document. Playwright’s guide puts the boundary clearly: “Screenshots answer one question well: what did the page look like at this moment?” Use assertions or other checks to answer whether a control works, text exists, or a request succeeded.
- Viewport capture: the pixels visible at a chosen viewport size.
- Full-page capture: the entire scrollable document, including content below the fold.
- Element capture: one locator’s bounding box, such as a chart or product card.
Choose the smallest area that answers your question. It produces smaller artifacts and avoids unrelated page changes.
Choose a PHP approach
| Approach | Documented capability | Best fit | Important qualification |
|---|---|---|---|
| Playwright PHP | Browser automation, navigation, assertions, viewport/full-page/element screenshots | Tests, authenticated flows, interactions and visual artifacts in one script | Reviewed examples state PHP 8.2+ and Node.js 20+; install the browser binaries required by the package release you use. |
| chrome-php/chrome | Direct Chrome/Chromium control, PNG/JPEG/WebP output, clipping and full-page layout capture | Teams wanting lower-level Chromium control | The repository reports PHP 7.4–8.5 and Chrome/Chromium 65+; verify compatibility with the current release. |
| Spatie Browsershot | Converts HTML to an image, PDF or string | A simpler rendering wrapper | Its README says the older v2 Chrome headless-CLI approach is not maintained. Confirm the maintained release and runtime before deployment. |
These are capability distinctions, not a speed or reliability ranking. The reviewed documentation contains no controlled benchmark.
#1 Best Overall
Playwright PHP: a complete basic screenshot
Install the Composer package and its documented browser binaries according to the version you select. The project examples currently describe PHP 8.2 or newer and Node.js 20 or newer, with the Node server starting automatically. Requirements can change, so check the release documentation during setup.
<?php
require __DIR__ . '/vendor/autoload.php';
use PlaywrightPlaywright;
$browser = Playwright::chromium(['headless' => true]);
$page = $browser->newPage([
'viewport' => ['width' => 1440, 'height' => 900],
]);
try {
$page->goto('https://example.com');
// Replace this selector with a state that proves your page is ready.
$page->locator('h1')->waitFor();
$page->screenshot(__DIR__ . '/screenshot.png');
} finally {
$browser->close();
}
The example deliberately waits for an expected heading instead of assuming that navigation alone means the page is ready. In an application, wait for the selector, text, or response that defines readiness for that page. Also handle navigation exceptions and always close the browser in a finally block.
Viewport, full-page and element screenshots
Viewport
The basic call captures the current viewport. Set width and height explicitly when the image will be compared in CI or used in documentation; otherwise host defaults can change the result.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Full page
Use Playwright’s full-page screenshot option when content below the fold matters. The exact option name depends on the package API version; follow that release’s screenshot guide. Very long pages can create large files and may expose lazy-loading or animation timing issues, so do not make full-page capture your default.
One element
Locate the component and call its screenshot method to capture only that region. Element capture is useful for a dashboard widget, invoice, or regression target and removes unrelated navigation and advertising pixels.
Rank #2
- Intuitive interface of a conventional FTP client
- Easy and Reliable FTP Site Maintenance.
- FTP Automation and Synchronization
Make the captured state deterministic
- Navigate to the exact URL, including any required path or query parameters.
- Set a fixed viewport and, where relevant, a fixed browser context, locale and authentication state.
- Wait for a meaningful selector or assert its visible text before capturing.
- Disable or await animations if your page supports that control; otherwise two captures can differ without a code change.
- Capture only after images, fonts and data needed by the target region are present.
For behavior checks, prefer locator assertions for text, visibility, enabled state, counts and accessible names. Keep the screenshot as visual evidence and debugging context. A trace can explain an action or network failure better than a single image; video may be more appropriate for motion.
Using chrome-php/chrome
chrome-php/chrome controls an installed Chrome or Chromium process directly. Its documented examples cover PNG, JPEG and WebP files, clipped regions and full-page layout capture. This route can suit a service that already manages a browser executable and wants direct protocol-level control.
Confirm the executable path, sandbox policy and browser version in your deployment image. The repository’s stated PHP 7.4–8.5 and Chrome/Chromium 65+ ranges are project claims, not a promise that every current release supports every combination. Build a small script that opens a known page, saves a PNG, and exits before integrating it into a queue or web request.
Using Spatie Browsershot
Browsershot presents a higher-level API for converting HTML to an image, PDF or string. It can reduce browser plumbing when you need a rendering wrapper rather than a test-oriented automation API. Its README notes that the older v2 method based on Chrome’s headless command-line interface is not maintained; select and verify a maintained release and its runtime requirements.
If the workflow must click controls, authenticate, assert text, or capture a particular post-interaction state, use a browser-automation API directly or confirm that your Browsershot version exposes those controls.
Rank #3
Operational details that affect reliability
Browser and font consistency
Browser version, installed fonts, viewport, device scale, animations, network data and environment all affect pixels. Pin or standardize these inputs for visual regression. The Playwright guide cautions against pixel comparison unless those inputs are controlled.
Timeouts and failures
Set navigation and action timeouts appropriate to your site, catch failures, and preserve a diagnostic screenshot or trace when possible. Distinguish a DNS/TLS failure from a page that loaded but never reached your readiness selector.
Security
Do not pass untrusted URLs directly to a server-side browser. Restrict destinations, block access to internal network ranges where appropriate, and protect credentials used for authenticated captures. Store screenshots outside a public directory unless they are intentionally public.
Resource use
Launching a browser per request is expensive. A queue, worker or managed browser pool can smooth bursts, while explicit browser closure prevents orphaned processes. Full-page images and high device scales consume more memory than viewport or element captures.
Troubleshooting
“Browser executable not found”
Install the browser binaries required by your Playwright release, or configure the correct Chrome/Chromium executable for chrome-php/chrome. Check the same user and container image that runs PHP; a browser installed only on a developer laptop is not available to production.
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 matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Rank #4
The image is blank or incomplete
Wait for a page-specific selector or data state rather than using an arbitrary short sleep. Check JavaScript console and network errors, lazy-loaded content, blocked third-party assets and authentication cookies.
The screenshot is the wrong size
Set the viewport explicitly and verify whether you requested viewport, full-page or element capture. Device scale and browser defaults can also change pixel dimensions.
Full-page capture misses content
Confirm that the page’s lazy-loading code reacts to scrolling and that the capture mode is truly full-page. For a very long document, capture sections or wait for the final content marker instead of relying on navigation completion.
Visual diffs change between runs
Control browser and font versions, viewport, data, animations and external resources. If those inputs cannot be controlled, use assertions for functional checks and treat screenshots as review artifacts rather than exact pixel tests.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server for developers. One GET request returns PNG, JPEG, WebP or PDF. It accepts cookie and consent banners like a visitor, then removes more than 60 known consent platforms, newsletter popups and chat widgets before capture; each step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads and cache hits cost nothing, and response headers identify the page verdict and whether the shot was billed.
Use the ScreenshotNeo API documentation for all options, including full-page and CSS-element capture, device presets and custom viewports, retina scale, PDF settings, custom CSS or JavaScript, clicks, waits, request blocking, headers, cookies, user agents, authorization, timezone, geolocation, transparent backgrounds, resizing, TTL-based caching, signed image links, asynchronous webhooks, bulk capture of up to 100 URLs per call, usage data and OpenAPI. Its MCP server exposes take_screenshot, get_page_info and capture_pdf to Claude, Cursor and other MCP clients.
Best Value
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://example.com"}, timeout=90)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://example.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
require('fs').writeFileSync('shot.webp', Buffer.from(await res.arrayBuffer()));
Every feature is included on every plan: 1,000 shots per month are free with no card; paid plans start at $5 for 3,000 shots. Create a free ScreenshotNeo account.
Which method should you use?
- Choose Playwright PHP when navigation, interaction, assertions and screenshots belong in one automated flow.
- Choose chrome-php/chrome when direct Chromium control and an existing browser runtime are priorities.
- Choose Browsershot when a maintained high-level HTML-to-image or PDF wrapper meets the requirement.
- Choose ScreenshotNeo when you want an HTTP call or MCP tools without installing and operating a browser.
Frequently Asked Questions
Can PHP 5.6 take a modern website screenshot?
The reviewed Playwright examples require PHP 8.2 or newer, while chrome-php/chrome reports a PHP 7.4–8.5 range. PHP 5.6 is not established as supported by these current workflows; upgrade PHP or use a separately maintained remote capture service.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problemsShould I use a screenshot to test that a button works?
No. Assert the button’s accessible name, visibility and enabled state, then use a screenshot to document the resulting visual state.
What image format should I save?
Use PNG when lossless detail matters, JPEG for smaller photographic images, and WebP when your consumer supports it. The chrome-php/chrome documentation lists all three; ScreenshotNeo can return PNG, JPEG or WebP.
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.

