ScreenshotNeo

BlogHow-to

How to Capture SERP Screenshots When Google Consent Banners Cover Results

Capture the consent prompt and the Google results after your choice, with a repeatable browser workflow that records the session context.

By the ScreenshotNeo team4 October 20267 min read

Capture the Google Search page twice when the consent prompt matters: first with the prompt still visible, then after making and recording your choice. The prompt can depend on location and session state, so record the query, time, browser, viewport, locale or region, and whether the session is signed in or in Incognito mode. Do not assume that accepting consent is required, or that one button label or automation selector appears everywhere.

This workflow gives you evidence of both what obstructed the results and what the SERP looked like after the choice. Keep the files separate and label their context.

1. Record the capture context

Before opening Google, note the exact query and the conditions you want to document. For comparisons, keep these conditions as steady as practical:

  • Search query and Google Search URL.
  • Capture date and time, including time zone.
  • Browser name and version, viewport width and height, and device scale if relevant.
  • Locale or region and session state: signed in, signed out, or Incognito.
  • Whether this is the initial prompt view or the post-choice results view.

A consent prompt is not guaranteed to appear in every region or session. Google’s 2022 account described a European rollout for visitors to Search and YouTube who were signed out or using Incognito mode. It described “Reject all” and “Accept all” on the first screen, plus “More options” for customization. That dated rollout description does not establish what every visitor sees now. Google’s announcement

2. Capture the prompt before interacting

Open the intended Google Search URL at the viewport relevant to your work. Wait until the page and prompt are visible, then save a screenshot before clicking anything. This first image documents the prompt’s wording, layout, and obstruction of the results. Do not crop away the prompt if its position or coverage is part of the evidence.

Read the choices shown in that session. Make the choice that matches the consent state you intend to document; rejecting cookies can still be followed by a SERP capture if Google presents that option. Do not treat acceptance as a prerequisite. If the prompt offers customization, the resulting state may differ from a simple accept-or-reject path.

3. Capture the SERP after the choice

After you make a choice, wait for the page to settle. Confirm that results are visible and that the consent panel is gone or no longer covering them. Save a second screenshot and label it with the same session context plus the choice made. Keep this image distinct from the prompt-covered image: they answer different documentation questions.

4. Automate the capture without assuming a universal selector

For repeat captures, automate navigation and the initial screenshot, then pause so an operator can inspect the actual prompt and click the appropriate visible control. This avoids embedding an unverified selector or assuming every region uses the same button label. The following Python example uses Playwright and takes both screenshots. Install Playwright with python -m pip install playwright, then install its Chromium browser with python -m playwright install chromium.

import asyncio
from datetime import datetime, timezone
from pathlib import Path
from urllib.parse import urlencode
from playwright.async_api import async_playwright

async def main():
    query = input("Search query: ").strip()
    locale = input("Locale or region to record (for example, en-US): ").strip()
    signed_in = input("Session state (signed in, signed out, or Incognito): ").strip()
    if not query:
        raise SystemExit("A search query is required.")

    stamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
    output = Path("serp-captures")
    output.mkdir(exist_ok=True)
    url = "https://www.google.com/search?" + urlencode({"q": query})

    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False)
        page = await browser.new_page(viewport={"width": 1440, "height": 1000})
        await page.goto(url, wait_until="domcontentloaded", timeout=60000)
        await page.wait_for_timeout(1500)
        print(f"Query: {query}\nURL: {page.url}\nUTC: {stamp}")
        print(f"Locale/region noted by operator: {locale}")
        print(f"Session state: {signed_in}")
        print("Inspect the page. Save the prompt view before making a choice.")
        input("Press Enter to save the initial view...")
        await page.screenshot(path=str(output / f"{stamp}-prompt.png"), full_page=True)
        input("Make your intended choice in the browser, wait for results, then press Enter...")
        await page.wait_for_load_state("domcontentloaded")
        await page.wait_for_timeout(1500)
        await page.screenshot(path=str(output / f"{stamp}-after-choice.png"), full_page=True)
        print(f"Saved screenshots under {output.resolve()}")
        await browser.close()

asyncio.run(main())

Run it with python capture_serp.py. The pause is deliberate: the script does not click a guessed consent button. For unattended automation, first inspect the prompt in the target region and session, identify a visible page-specific control, and validate the action and resulting screenshot there. A generic banner-dismissal example from a browser vendor does not validate its selector for Google Search.

5. Check the screenshots before using them

  • Confirm the initial image actually shows the prompt and enough of the results page to establish what it covered.
  • Confirm the second image shows loaded results and is not a transient blank or loading state.
  • Check that filenames and notes distinguish the two consent states.
  • When comparing sessions, document differences in query, locale, viewport, sign-in state, and capture time. Search results can vary; this research does not quantify that variation.
  • Preserve the original captures. If you create a crop for analysis, keep it separate and do not imply it is the unaltered original.

Or skip the browser setup

ScreenshotNeo is a website screenshot API and MCP server. Its consent handling accepts the cookie or consent banner like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. For a capture, send the Google Search URL as the url parameter:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url='https://www.google.com/search?q=your+query' -o serp.webp

See the ScreenshotNeo API documentation for the request options. A Python equivalent:

import requests

r = requests.get(
    "https://api.screenshotneo.com/v1/shot",
    params={
        "access_key": "YOUR_API_KEY",
        "url": "https://www.google.com/search?q=your+query",
    },
    timeout=90,
)
r.raise_for_status()
open("serp.webp", "wb").write(r.content)

And Node.js:

const q = new URLSearchParams({
  access_key: 'YOUR_API_KEY',
  url: 'https://www.google.com/search?q=your+query'
});
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot request failed: ${res.status}`);
await Bun.write('serp.webp', res);

Cookie banners, popups, and chat widgets are removed before the shot. Bot checks, blank pages, and failed loads are never billed; response headers say which page verdict applied and whether the request was billed. Its MCP server lets AI agents use take_screenshot, get_page_info, and capture_pdf. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 shots. Because a clean capture removes the consent prompt, use the manual workflow above when the prompt-covered view itself is evidence you need. Sign up for 1,000 free screenshots a month, with no card.

Troubleshooting

Its presence can depend on location and session state. Record the context and capture the page as it appears; do not force a different consent state and describe it as universal.

The button label or layout differs

Use the choices visible in that session. Avoid copied selectors until you validate them against the current page in the target region and session. The Playwright example leaves this decision to the operator.

The second capture still shows an overlay or incomplete results

Wait longer, confirm that the page has finished rendering, and verify the result manually before labeling it a post-choice SERP. A fixed delay is only a starting point and may not fit every session.

The automated browser times out

Check network access, browser installation, and whether Google or the environment is presenting an additional interstitial. Increase the navigation timeout only after identifying a slow load; do not treat a timeout screenshot as a successful SERP.

The screenshot is the site inspection view, not the SERP

Search Console’s URL Inspection tool provides a rendered screenshot of a site as Google-InspectionTool sees it during a successful live test. It is useful for inspecting your page, not for capturing the Google results page. Search Console URL Inspection documentation

Publication, reliability, and cost notes

For evidence, keep both images, record the environment, and repeat captures when the comparison matters. A result page is a snapshot of one query and session; this workflow does not guarantee identical results across time or regions. The browser approach has no screenshot API charge, but it requires a browser runtime and operator review when consent controls vary.

If publishing Google Search screenshots, check Google’s current Search usage guidance for the medium and intended use. Google says educational or instructional print screenshots do not require permission, while advertisements require approval; its guidance also prohibits embedding, framing, mirroring, or duplicating Search in another website or application. Do not alter the interface or imply Google endorsement.

FAQ

Save the initial prompt-covered view, make the choice you intend to document, wait for results, and save a second image. Record the session context for both.

Can I reject cookies and still screenshot the search results?

If the session presents a reject option, choose it and capture the page after results load. The available choices and resulting page can vary by context.

Should I use Search Console for a SERP screenshot?

No. URL Inspection shows a rendered screenshot of a page being tested as Google-InspectionTool sees it, not an ordinary Google Search results page.