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.
{ "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:
{ "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) vsnative(faster). Trynativeif stitching misbehaves.detect_full_height— on by default: finds elements whose height is tied to the viewport (like100vhimage backgrounds) so they don't stretch to the 4096px full-page viewport. You don't need to set it; passfalseonly 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.
{ "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 (600is a good starting point) so each section waits for its animation to finish.height— set alongsidefull_pageit caps the viewport, and so each captured section, at that height (1400suits animation-heavy pages). See stitch and scroll options.engine_version— set tolatestto pick up the newest stitching fixes.
{ "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.
{ "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.
{ "url": "https://example.com", "full_page": true, "engine_version": "latest", "css": ".floating { visibility: hidden }"}