Recommended Free Tools
Short answer: a screenshot tool can capture a page only after a permitted browser session has rendered it. If the site blocks your browser or an automated request before the page appears, a screenshot API cannot be assumed to defeat that block. Ask the site owner for access, an authorized copy, or an approved capture. When the page is visible, use the browser’s built-in capture or automation features to save the viewport, an element, a selected area, or the full page.
First identify what is actually blocked
“Bot blocking” and “screenshot blocking” are different problems. A site may challenge or deny an automated request, while your normal browser session can still display the page. Conversely, an organization-managed browser can disable screenshot functions even though the site itself is available.
When the page is visible
If you can open the page in a browser session the site permits, capture the rendered result. The capture records what your browser received; it does not grant additional access. Choose a viewport or selected-area image for a focused record, an element capture for a component, or a full-page image when content below the fold matters.
When access is denied
If a challenge, denial page, or blank response appears before the intended content, stop treating the problem as a screenshot setting. Contact the site owner and request permission, an authorized copy, or a capture supplied by the owner. Do not attempt to defeat the site’s controls with stealth settings, proxy rotation, user-agent tricks, or CAPTCHA-solving services.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Fix the driver behind crashes, sound loss and screen glitches3Clear out junk files and repair common Windows errors#1 Best Overall
When capture itself is disabled
On a work or school device, an administrator may enforce screenshot-prevention policy. Chrome Enterprise documents administrator-controlled screenshot prevention for certain managed devices, browsers, and licensed environments. Ask your administrator whether a policy is responsible instead of assuming the website blocked you.
Choose the capture scope
| Need | Best scope | Trade-off |
|---|---|---|
| What is currently visible | Viewport screenshot | Fast and predictable, but excludes content below the fold. |
| One card, chart, or component | Element screenshot | Requires a stable selector or an interactive selection tool. |
| A region of the screen | Selected-area capture | Includes only the chosen pixels, not necessarily the element’s full DOM bounds. |
| Everything on a long page | Full-page capture | Lazy-loaded sections, sticky headers, and very tall pages can affect the result. |
Use built-in browser capture when the page is accessible
Microsoft Edge
Edge’s capture feature can save a full page or a selected area. Open the page, then open the browser menu and choose the capture or screenshot command (the exact label can vary by Edge release). Select Capture full page for the complete scrollable document or Capture area for a region, review the preview, and save or copy it. If the command is unavailable, check whether an administrator policy has disabled screenshots.
Other browser-native methods
Browser developer tools commonly provide a screenshot command for the visible viewport, a selected node, or the full page. Open developer tools, use the command menu, search for “screenshot,” and choose the scope offered by your browser version. These commands operate on content already rendered in your permitted session; they do not change the site’s access decision.
Automate an accessible page with Playwright
Playwright documents viewport, element, and full-page screenshots. The following Node.js example opens a URL, waits for the page to settle, and writes a full-page PNG. Use it only for URLs you are allowed to access.
- Install Playwright in a new project:
npm init -y, thennpm install playwright. - Install the browser binary with
npx playwright install chromium. - Save the script below as
capture.mjs. - Run
node capture.mjs https://example.com.
import { chromium } from 'playwright';
const target = process.argv[2];
if (!target) throw new Error('Usage: node capture.mjs https://example.com');
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage({ viewport: { width: 1440, height: 900 }, deviceScaleFactor: 1 });
try {
const response = await page.goto(target, { waitUntil: 'networkidle', timeout: 60000 });
if (!response || !response.ok()) {
throw new Error(`Navigation failed: ${response ? response.status() : 'no response'}`);
}
await page.screenshot({ path: 'page.png', fullPage: true });
} finally {
await browser.close();
}
Viewport, element, and selected content
For only the visible viewport, omit fullPage or set it to false. For one element, locate it and call locator.screenshot:
const card = page.locator('[data-testid="pricing-card"]').first();
await card.waitFor({ state: 'visible', timeout: 15000 });
await card.screenshot({ path: 'card.png' });
Free tools Windows power users keep installed
One-click scans. No signup required.
Selectors must match the page you actually received. If a bot challenge replaces the page, the selector will not exist; that is an access result, not a screenshot bug.
Waiting for dynamic and lazy content
networkidle is useful but not universal: analytics or streaming connections may never become idle. Prefer a known readiness signal when one exists:
await page.goto(target, { waitUntil: 'domcontentloaded', timeout: 60000 });
await page.locator('main').waitFor({ state: 'visible', timeout: 30000 });
await page.waitForTimeout(1000);
await page.screenshot({ path: 'ready.png', fullPage: true });
Scroll through long pages before a full-page shot when images are lazy-loaded:
Rank #3
await page.evaluate(async () => {
await new Promise(resolve => {
let y = 0;
const step = 600;
const timer = setInterval(() => {
window.scrollBy(0, step);
y += step;
if (y >= document.body.scrollHeight) {
clearInterval(timer);
window.scrollTo(0, 0);
resolve();
}
}, 100);
});
});
Record context and protect sensitive data
Save the URL and capture date alongside the file when the image may be used as evidence or documentation. Before sharing, inspect the image for account names, email addresses, tokens, order numbers, private messages, or personal data and redact them. These are practical handling steps, not a universal legal or archival rule.
Why changing a user agent is not a fix
Cloudflare’s official Browser Run screenshot documentation states: “The userAgent parameter does not bypass bot protection.” The same documentation says Browser Run requests are always identified as bots. A different user-agent string therefore cannot be presented as a reliable or authorized way to obtain a blocked page. The same boundary applies to screenshot APIs generally: rendering begins only after the service can access the requested content.
Troubleshoot the common failure modes
You receive a challenge or denial page
Cause: the site rejected the browser or automation request before the target content loaded. Fix: open the page through a permitted session, or request an authorized copy or capture from the owner. Do not add CAPTCHA bypasses or stealth automation.
The screenshot is blank
Cause: navigation failed, content is still loading, JavaScript did not run, or the page returned an interstitial. Fix: inspect the final URL and HTTP status, wait for a page-specific selector, and save a diagnostic screenshot of the visible result. If the visible result is a block page, access—not image encoding—is the issue.
Full-page capture misses images
Cause: lazy loading or intersection-based rendering. Fix: scroll the document to trigger loading, wait for image elements to complete, then capture again. Some pages intentionally load media only after user interaction.
An element selector times out
Cause: the selector changed, the element is inside a frame, or the target page was replaced by a challenge. Fix: inspect the DOM in the permitted browser, use a stable attribute, and handle frames explicitly when the site documents them.
The browser has no screenshot command
Cause: browser version, platform, or management policy. Fix: update according to your organization’s policy, use a documented automation tool on a permitted machine, or ask the administrator to confirm the screenshot-prevention setting.
The capture is cut off or unreadable
Cause: an extremely tall page, fixed headers, device-scale differences, or a narrow viewport. Fix: capture in sections, set an explicit viewport, use a higher device scale factor for text, or capture the relevant element instead of the entire document.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server. It still needs the target URL to be accessible; it is not a way around a site’s access controls. When access is permitted, it removes cookie-consent banners, newsletter popups, and chat widgets before capture. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers identify the page verdict and billing result. Its MCP tools—take_screenshot, get_page_info, and capture_pdf—work with Claude, Cursor, and other MCP clients.
One GET request returns PNG, JPEG, WebP, or PDF output. See the ScreenshotNeo documentation for all parameters.
cURL
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteWindows 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 reinstallPython
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
Best Value
Node.js
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const fs = await import('node:fs/promises');
await fs.writeFile('shot.webp', Buffer.from(await res.arrayBuffer()));
Useful controls
- Capture a full page with lazy images loaded, or one element by CSS selector.
- Set dark mode, any viewport, one of 12 device presets, and retina scale.
- Generate PDFs with paper size, margins, landscape mode, and page ranges.
- Apply custom CSS or JavaScript, click an element, hide selectors, or wait for a selector, delay, or network idle.
- Block ads, trackers, requests, or resource types; supply headers, cookies, a user agent, Authorization, timezone, and geolocation.
- Use transparent backgrounds, image resizing, a chosen cache TTL, signed links for public
<img>tags, asynchronous jobs with signed webhooks, bulk capture for up to 100 URLs per call, a usage API, and an OpenAPI specification. - Parameter names used by other screenshot APIs also work, which can simplify migration.
Plans and billing
| Plan | Allowance | Price |
|---|---|---|
| Free | 1,000 shots/month | Free; no card |
| Starter | 3,000 shots | $5 |
| Growth | 15,000 shots | $15 |
| Pro | 60,000 shots | $39 |
| Scale | 250,000 shots | $99 |
| Business | 1,000,000 shots | $249 |
Every feature is included on every plan, and yearly billing provides two months free. Start with 1,000 free screenshots a month with no card.
Performance, reliability, and cost choices
- Reuse a browser: For Playwright batches, keep one browser process open and create separate pages; launching a new browser for every URL adds overhead.
- Wait deliberately: A selector-based wait is usually more deterministic than an arbitrary long delay. Set a timeout that matches the page’s normal load behavior and record failures.
- Control page size: Full-page images consume more memory and storage than viewport or element captures. Use the smallest scope that answers your question.
- Cache carefully: A cached image may be appropriate for stable documentation but stale for frequently changing pages. ScreenshotNeo lets you choose a cache TTL and reports cache hits.
- Check billing headers: ScreenshotNeo bills only clean shots; bot checks, blank pages, timeouts, failed loads, and cache hits are free. Inspect
X-Page-VerdictandX-Billedin responses when reconciling usage. - Protect credentials: Keep API keys in environment variables or a secret manager, not source control or client-side code.
What a screenshot can and cannot prove
A capture shows what was rendered at a particular URL, time, viewport, and account state. It does not prove that every visitor can access the page, that hidden content exists, or that the site’s controls were bypassed. For reproducibility, retain the URL, date, viewport, and any relevant authorization context while following the site owner’s terms.
Frequently Asked Questions
Can a screenshot API access a page that blocks bots?
Not necessarily. It can capture content after an authorized request is rendered, but the site may identify and deny the automated request. Request permission or an authorized copy when access is blocked.
Do I need special hardware to capture a blocked website?
No. Browser capture and automation are software capabilities. Hardware does not grant access to content the site has denied.
Why is my work computer preventing screenshots?
An administrator-controlled screenshot-prevention policy may be active on a managed browser or device. Ask your administrator to confirm the policy.
Should I save the URL with the image?
Yes, when context matters. Store the URL and capture date with the file, and remove sensitive information before sharing.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →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.




