Full-page gotchas

Fix full-page screenshots that are cut off, stretched, or have duplicated headers.

Full-page screenshots (full_page: true) capture the whole scrollable page, but tall or dynamic pages can come back cut off, stretched, or with repeated sticky headers.

One image, not separate pages

A full-page capture always comes back as a single image — the sections Urlbox stitches together aren't returned individually, and there's no option to split the capture into one file per screenful. If you need discrete pages, render to PDF without full_page: the default for format: "pdf" lays the site out across multiple pages of the document, which you can then split or print page by page.

Request
{  "url": "https://example.com",  "format": "pdf"}

Duplicated headers or footers

Urlbox stitches several sections together, so fixed elements can repeat in each one. freeze_fixed (default true) detects and captures them only once — leave it on. If a site fools the heuristic, try the stitch settings below.

If a specific element still repeats — an accessibility widget, a chat bubble, a floating player — set engine_version to latest first, which carries the newest fixed-element detection. If it survives that, hide it outright with hide_selector pointed at that element:

Request
{  "url": "https://example.com",  "full_page": true,  "engine_version": "latest",  "freeze_fixed": true,  "hide_selector": "#widgetId"}

Cut off or stretched

  • full_page_mode — stitch (default, most accurate) vs native (faster). Try native if stitching misbehaves.
  • detect_full_height — on by default: finds elements whose height is tied to the viewport (like 100vh image backgrounds) so they don't stretch to the 4096px full-page viewport. You don't need to set it; pass false only to turn the check off. See it side by side.
  • max_section_height — cap the height of each captured section.
  • scroll_delay — give lazy content time to load between scroll steps.
  • max_height — cap the total height of very long pages.
Request
{  "url": "https://example.com",  "full_page": true,  "full_page_mode": "stitch",  "scroll_delay": 500}

Scroll-linked animations

Content that animates in as you scroll can still be missing after a long delay, because stitch mode captures each section as it scrolls past — the animation has to finish at every step, not just before the first one. Three settings together fix most of these pages:

  • scroll_delay — raise it (600 is a good starting point) so each section waits for its animation to finish.
  • height — set alongside full_page it caps the viewport, and so each captured section, at that height (1400 suits animation-heavy pages). See stitch and scroll options.
  • engine_version — set to latest to pick up the newest stitching fixes.
Request
{  "url": "https://example.com",  "full_page": true,  "engine_version": "latest",  "scroll_delay": 600,  "height": 1400}

Canvas content, like maps

full_page scrolls the page and stitches the sections together, which doesn't suit content drawn into an HTML canvas — maps especially. The canvas redraws between scroll steps, so the render can come back duplicated or inconsistent, and the scroll-and-wait cycle makes it slow as well.

For these pages, drop full_page and set an explicit viewport instead — width and height matching the output you want. The canvas is then captured in one pass, which also removes the delay.

Request
{  "url": "https://example.com",  "width": 1280,  "height": 800}

For the full walkthrough, see Full page screenshots.

Floating panels that get in the way

A floating or sticky panel — a support widget, a promo bar pinned to the bottom, a drawer that opens as you scroll — can sit over the content you wanted. These are hard to detect automatically, so hide them yourself: inject a CSS override with css, or name the element in hide_selector. Render with engine_version set to latest as well.

Request
{  "url": "https://example.com",  "full_page": true,  "engine_version": "latest",  "css": ".floating { visibility: hidden }"}