ScreenshotNeo

BlogAI agents

How to Troubleshoot Website Screenshots from MCP with Missing Lazy-Loaded Images

Find out why lazy-loaded images are missing from MCP screenshots, how to trigger and verify loading, and how to separate page issues from response settings.

By the ScreenshotNeo team4 October 20266 min read

When an MCP screenshot is missing lazy-loaded images, the usual issue is that the screenshot was taken before the page triggered or finished loading those images. A navigation-complete event, a short pause, or a full-page capture alone does not prove every image has loaded. Scroll the missing image into or near the viewport, wait for evidence that it loaded, inspect network and console activity, then capture again. This guide uses Playwright MCP as the example; adapt the tool names and options for your MCP server.

1. Check what the screenshot is supposed to include

First determine whether the missing image is outside the screenshot’s capture area. Playwright MCP’s browser_take_screenshot supports a viewport screenshot, a screenshot of a target element, or a full-page screenshot. A viewport screenshot only shows the visible area. Use fullPage: true to capture the full scrollable page; it cannot be combined with target. Full-page mode controls capture scope, but does not guarantee that site-specific lazy loading ran or that every image request succeeded. See the Playwright MCP screenshot documentation.

Use an accessibility snapshot to find the relevant page structure and image location, then inspect a screenshot to confirm the visual result. A snapshot helps locate content, but it does not establish that the image pixels have loaded.

2. Trigger the lazy loader and wait for evidence

Native lazy loading commonly postpones off-screen image requests until scrolling brings the image near the viewport. Pages can also use JavaScript or intersection-based logic with their own trigger conditions. Scroll the missing image or its containing section into view, then wait for a page-specific signal when available.

Playwright MCP’s browser_wait_for can wait for text to appear or disappear, or wait for a specified duration. A time wait is only a bounded retry interval; it is not proof of image readiness. The MCP’s default post-action settle delay is 500 ms, which gives triggered work time to settle but does not promise that every lazy image has completed. Check the Playwright MCP configuration options for details.

Where code-level page inspection is available, inspect the specific image’s complete property and verify that it rendered as expected. The page’s load event can fire while lazy-loaded images and other media remain unloaded, so it is not a sufficient readiness test. See MDN’s guide to lazy loading.

3. Inspect network requests and console messages

After scrolling, use the MCP server’s network-request inspection to look for requests related to the missing image. Playwright MCP’s browser_network_requests can show requests since page load, including successful static resources. Check whether an image request appeared, whether it succeeded, and whether its URL looks correct. Inspect browser_console_messages for JavaScript errors that may have stopped the site’s loader.

  • No image request after scrolling: the page may not have reached the loader’s trigger condition, or its JavaScript may not have run. Scroll the relevant region into view, wait for a page-specific signal, and check console errors.
  • Request appears but fails or is blocked: inspect the request and response details, the image URL, and any blocking or access requirements. Increasing the wait cannot fix a failed request.
  • Request succeeds but the screenshot still lacks the image: check whether the image is hidden, covered, outside the capture target, or not yet rendered into the expected layout.

These are diagnostic branches, not claims about a particular site. Without the page URL, MCP server and version, browser, and request and console evidence, the precise cause cannot be determined.

4. Separate page rendering from MCP image response settings

A tool response that contains no image bytes does not necessarily mean the browser page omitted the image. Playwright MCP’s --image-responses setting controls image data in the tool response: allow is the default, omit excludes image responses, and only returns image responses only. Check this setting separately from whether the page rendered the image. The Playwright MCP server documentation describes the option and the server’s inspection tools.

5. A repeatable troubleshooting checklist

  1. Confirm whether you want the viewport, one element, or the full scrollable page.
  2. Locate the missing image using page structure and visual inspection.
  3. Scroll its region into or near the viewport to trigger native or site-specific loading.
  4. Wait for a page-specific signal if possible. Treat fixed waits as retry intervals, not readiness guarantees.
  5. Inspect image requests and console messages for absent requests, failed loads, or script errors.
  6. When page inspection is available, check the target image’s complete state and visible rendering.
  7. Capture again, then check MCP image-response settings if the tool output still lacks image data.

Common errors and fixes

Symptom Likely explanation What to try
Image is below the fold and absent in a viewport capture The capture excludes content outside the viewport. Use full-page capture if you need the full scrollable page, or capture the target element.
Full-page capture still has blank image areas Full-page scope did not trigger or complete the page’s lazy loader. Scroll the image region into view, verify its request and rendered state, then capture again.
Waiting longer makes no difference The image may never have been requested, or its request may have failed. Inspect network requests and console messages before changing timeouts.
Image request succeeds but pixels are absent The page may hide or cover the image, or layout/rendering may not be complete. Inspect the element’s visibility, surrounding layout, and screenshot target.
Screenshot looks correct in browser but tool result has no image data MCP image-response mode may omit image responses. Check --image-responses and distinguish returned tool data from the screenshot itself.
Page appears ready after navigation but image is missing The page load event does not guarantee lazy media has loaded. Trigger the image’s loading condition and wait for image-specific evidence.

Performance, reliability, and cost

Scrolling and waiting only as long as needed for a specific readiness signal avoids relying on an unnecessarily long fixed pause. For pages with many images, diagnose the particular missing region rather than assuming every image should load at navigation time. Network and console inspection make retries more useful: they distinguish a late request from a request that never starts or fails.

For repeatable screenshot workflows, record the capture scope, browser and MCP server version, readiness condition, and any image-response setting alongside the result. This makes it easier to compare runs when a site’s loading behavior changes. The research sources do not establish a universal timeout, performance benchmark, or cost for MCP screenshot runs; those depend on the chosen environment and workload.

Or skip the browser setup

ScreenshotNeo is a website screenshot API and MCP server from ScreenshotNeo. Its capture options include full-page screenshots with lazy images loaded, and the API accepts common screenshot parameter names to make switching easier. 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}`);
  • Cookie banners are accepted and removed before capture; 60+ known consent platforms, newsletter popups, and chat widgets can be removed, and each step can be turned off.
  • Bot checks, blank pages, timeouts, failed loads, and cache hits cost nothing. Response headers report the page verdict and billing status.
  • An MCP server provides take_screenshot, get_page_info, and capture_pdf tools for AI agents.
  • 1,000 screenshots per month are free with no card. Paid plans start at $5 for 3,000 screenshots; every feature is on every plan.

Sign up for 1,000 free screenshots a month, with no card.

FAQ

Does full-page mode force every lazy image to load?

No. It captures the full scrollable page, but it is not a guarantee that every site-specific lazy loader ran or every image request succeeded.

Should I always add a longer fixed delay?

No. First check whether scrolling triggered an image request and whether that request succeeded. A longer wait helps only when work is still progressing.

Can the MCP response hide an image that rendered in the page?

Yes. Check the MCP server’s image-response setting separately from the browser page’s rendered output.