Free tools Windows power users keep installed
One-click scans. No signup required.
To remove a cookie banner from a screenshot, hide its specific outer element only while the image is captured. In Playwright, use the screenshot style option or a narrowly targeted locator. If the banner is inside a cross-origin iframe, interact with the frame instead. Hiding pixels is not the same as recording consent, so choose the method according to whether you need a clean image or a behavioral test.
First decide: clean image or real consent behavior?
A visual capture needs an unobstructed page. A consent or compliance test needs to verify that a visitor can accept, reject, or customize cookies and that the resulting state persists. Removing a banner with CSS solves only the first problem: it changes presentation for the capture and does not accept, reject, or save a consent choice.
- Use screenshot-time hiding for design reviews, documentation, visual regression baselines, and page inventories.
- Use a real click flow when consent affects personalization, analytics, gated content, navigation, or repeat visits.
- Capture both states when a full-screen consent wall may prevent the underlying content from loading. A clean-looking image can otherwise document an incomplete page.
Cookie-banner extensions also have different side effects. A 2024 study by Demir et al. found that, in its sampled sites and tested configurations, each identified extension handled an average of 12 (65%) banners, with a 48%–95% range and 21% standard deviation. The same study observed average tracking requests rising from 16.6 to 26 (a 60% increase) after banner interaction in one experimental profile. Those figures describe that study, not every site, extension, or current version; see the 2024 Proceedings on Privacy Enhancing Technologies paper.
Hide a banner in Playwright without changing page state
Playwright can apply a stylesheet only for the screenshot. This avoids permanently editing the page and keeps the browser context’s consent state unchanged.
1. Inspect the real banner container
- Open the page in a browser and use DevTools’ element picker.
- Select the outermost element that contains the banner, backdrop, and close controls.
- Temporarily set
display: nonein the Styles pane. Confirm that the page underneath remains intact and that you did not hide a required layout wrapper. - Use that exact selector in automation. Do not guess from text such as “cookie” or “overlay”; broad selectors can remove legitimate content.
Common examples listed by Sitepager are #onetrust-banner-sdk (OneTrust), #CybotCookiebotDialog (Cookiebot), .fs-cc-banner_component (Finsweet Cookie Consent), and site-specific selectors such as .cookie-banner or #cookie-notice. They are implementation examples, not universal selectors. Confirm the match on each site using Sitepager’s selector guide.
2. Apply a screenshot-only style
import { test, expect } from '@playwright/test';
test('clean page capture', async ({ page }) => {
await page.goto('https://example.com', { waitUntil: 'networkidle' });
await page.screenshot({
path: 'page-clean.png',
fullPage: true,
style: '#onetrust-banner-sdk, #onetrust-consent-sdk { display: none !important; }'
});
});
The style option changes the page for the capture operation. Keep the rule narrow, and include a backdrop selector if the site uses a separate full-screen scrim. For a single element rather than the whole page, locate that element and use its screenshot options:
const card = page.locator('.pricing-card').first();
await card.screenshot({
path: 'pricing-card.png',
style: '#cookie-notice { display: none !important; }'
});
3. Verify one page before a scan
Save a test image and inspect it manually or in an image-diff step. Confirm that the banner and backdrop are gone, the page content is still present, and no fixed header, footer, modal, or legitimate “cookie” content disappeared. Run one URL first, then expand to a crawl. Sitepager recommends this progression because a selector that misses one implementation—or hides too much—can otherwise contaminate an entire batch.
Interact with consent when the test requires it
When the page’s behavior depends on consent, use the actual button and persist the resulting state deliberately. Predictable overlays belong in the normal test flow. Playwright’s documentation says: “When an overlay is shown predictably, we recommend explicitly waiting for it in your test and dismissing it as a part of your normal test flow, instead of using page.addLocatorHandler().”
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 →await page.goto('https://example.com');
const banner = page.locator('#onetrust-banner-sdk');
await banner.waitFor({ state: 'visible' });
await banner.getByRole('button', { name: /accept/i }).click();
await expect(banner).toBeHidden();
await page.screenshot({ path: 'after-consent.png', fullPage: true });
Use page.addLocatorHandler() for genuinely unpredictable blockers, not as a replacement for a known setup. A handler can alter focus or mouse state; make every action after it self-contained. The official guidance is in the Playwright Page API.
#1 Best Overall
Cross-origin iframe banners
A consent widget rendered in a cross-origin iframe is a separate document. A selector in the main page and JavaScript evaluated in the main page cannot simply reach inside it. Discover the frame, target its button, and then verify the resulting state:
await page.goto('https://example.com');
const consentFrame = page.frames().find(frame =>
frame.url().includes('consent-provider.example')
);
if (!consentFrame) throw new Error('Consent frame not found');
await consentFrame.getByRole('button', { name: /accept/i }).click();
await page.screenshot({ path: 'consented.png', fullPage: true });
Frame URLs and accessible names vary, so inspect the page before hard-coding them. The Invisible Playwright community guide explains why deleting a displayed widget does not create a consent record and why a banner can return in a fresh context.
Choose screenshot scope and pixel scale deliberately
Playwright supports viewport, element, and full-page captures. A viewport image reflects the visible browser area; an element image isolates a component; a full-page image includes content below the fold. Choose the scope that matches the comparison rather than always using full page.
| Goal | Capture | Important choice |
|---|---|---|
| Above-the-fold visual check | Viewport screenshot | Set a fixed viewport and wait for fonts and images. |
| Component regression | Locator screenshot | Use a stable selector and clip only the component. |
| Page inventory or document | fullPage: true |
Load lazy content before capture and confirm sticky elements do not duplicate unexpectedly. |
CSS scale records one image pixel per CSS pixel. Device scale produces device-pixel output and can make files and dimensions larger on high-density displays. Keep the choice constant across baselines; otherwise image comparisons can report differences caused only by scale. See Playwright’s screenshots documentation.
Rank #2
- Intuitive interface of a conventional FTP client
- Easy and Reliable FTP Site Maintenance.
- FTP Automation and Synchronization
Reliable capture sequence
- Start a fresh, explicit context. Set viewport, locale, timezone, geolocation, user agent, and storage state rather than relying on a developer machine.
- Navigate and wait. Use an appropriate load condition, then wait for a known content selector or network idle. A fixed delay alone is less reliable for late-rendering banners.
- Identify the implementation. Inspect the DOM and any frames; record the selector or frame URL with the test.
- Choose hide or interact. Apply screenshot-only CSS for visual work; click the real control for behavioral work.
- Load lazy content. Scroll or wait for required images before a full-page shot.
- Capture at fixed dimensions and scale. Keep these settings identical between runs.
- Inspect the output. Check for blank pages, bot challenges, missing sections, accidental hidden content, and duplicated sticky UI.
- Expand gradually. Run one URL, then a small group, then the full scan.
Troubleshooting cookie-banner screenshots
The selector does nothing
The banner may use a different class, be inserted after navigation, or live in an iframe. Inspect after the banner appears, wait for its container, and list page.frames(). Replace guessed selectors with the confirmed outer wrapper.
The banner disappears but the page is dim or unclickable
A separate backdrop remains. Inspect sibling or fixed-position elements and add only the confirmed backdrop selector to the screenshot style. Avoid rules such as [class*="overlay"], which can remove legitimate dialogs.
The banner returns on every run
Hiding it never stored consent. For a behavioral test, click the control and save storage state; for a visual-only run, keep the screenshot style in every fresh context.
Recommended Free Tools
Consent content is still missing
A consent wall may gate scripts or content. Suppressing its pixels cannot reconstruct blocked content. Perform the real consent flow, or report that the clean image is intentionally a presentation-only capture.
Rank #3
Clicks fail inside the banner
Target the correct frame and wait for the button. Cross-origin boundaries prevent main-frame selectors from reaching the embedded document.
Images are missing in a full-page shot
Wait for the image selector, scroll to trigger lazy loading, or use a network-idle condition plus an explicit readiness check. Do not treat a screenshot as complete merely because navigation finished.
Visual diffs change between runs
Fix viewport, device scale, fonts, timezone, geolocation, animation state, consent storage, and screenshot scope. Capture at the same point in the page lifecycle each time.
Rank #4
A bot check or timeout replaces the page
Do not hide the challenge and label the result a page capture. Record the failed state, adjust permitted test conditions, or use a capture service that reports failed loads separately.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Or skip the browser setup: ScreenshotNeo
ScreenshotNeo is a website screenshot API and MCP server. It accepts consent banners before capture, then removes more than 60 known consent platforms, newsletter popups, and chat widgets; each cleanup step can be turned off. Only clean shots are billed: bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, and response headers report X-Page-Verdict and X-Billed.
For a one-call capture, see the ScreenshotNeo API documentation:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
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)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
It also supports full-page and selector captures, dark mode, 12 device presets or custom viewports, retina scale, PDF settings, custom CSS and JavaScript, clicks, waits, request blocking, headers, cookies, user agents, authorization, timezone, geolocation, transparent backgrounds, resizing, chosen cache TTLs, signed links, asynchronous webhooks, bulk capture of up to 100 URLs per call, a usage API, and an OpenAPI specification. Its MCP tools—take_screenshot, get_page_info, and capture_pdf—let Claude, Cursor, or another MCP client capture pages without you wiring a browser.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Best Value
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. Every feature is on every plan. Create a free ScreenshotNeo account to start with the 1,000 monthly shots.
FAQ
Does hiding a cookie banner make the screenshot legally consented?
No. It changes the image only; it does not record a visitor’s choice or establish compliance.
Can one selector work on every website?
No. Banner implementations differ, so inspect and validate the outer container per site or template.
Should I always accept cookies before capturing?
Only when the test is intended to represent an accepting visitor or requires consent-gated content. A visual baseline can use screenshot-time hiding instead.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Why use a fresh browser context?
It makes consent storage and other state explicit, so results are repeatable rather than inherited from a previous run.
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.




