To capture an entire web page with Playwright, call page.screenshot({ path: "page.png", fullPage: true }). The fullPage: true option captures the complete scrollable document instead of only the visible viewport, and path writes the image to a file. Elixir developers can use this browser API through a separately verified JavaScript or service integration, but the available Wallaby documentation does not establish a direct fullPage screenshot method. Treat the browser-invocation layer as toolchain-specific rather than assuming Wallaby exposes Playwright’s API.
What “full page” means
A normal browser screenshot represents the current viewport. A full-page screenshot represents the whole scrollable document, including content below the fold. Playwright describes this as capturing the page “as if it had a very tall screen and the page could fit it entirely.” Its screenshot API leaves fullPage disabled by default, so you must enable it explicitly.
The documented Playwright call
The core implementation is JavaScript because this is the API documented by Playwright:
await page.screenshot({ path: "page.png", fullPage: true });
Here, page is an already-created Playwright page, path is the output filename, and fullPage: true changes the capture area from the viewport to the full scrollable page.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstall#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
A complete Playwright example
import { chromium } from "playwright";
const browser = await chromium.launch();
const page = await browser.newPage({
viewport: { width: 1440, height: 900 }
});
await page.goto("https://example.com", { waitUntil: "networkidle" });
await page.screenshot({
path: "example-full-page.png",
fullPage: true
});
await browser.close();
Install Playwright in the JavaScript project used to run this script, install its supported browser binaries, and run the script from an environment that can launch that browser. The exact install commands and browser versions change, so use the commands for the Playwright release selected for your project.
Useful screenshot options
| Option | Purpose | What to check |
|---|---|---|
fullPage: true |
Captures the full scrollable document. | Content must be present in the DOM or loaded while the page is prepared. |
path: "file.png" |
Saves the image to a file. | Ensure the process can write to the destination directory. |
quality |
Controls image quality where the selected image format supports it. | Quality and format combinations have format-specific behavior. |
scale |
Controls the scale used for the screenshot. | Higher output density can increase dimensions and file size. |
Keep the full-page flag and output path explicit in production code. This avoids silently producing a viewport-only image after a refactor.
How Elixir fits into the workflow
Elixir does not gain Playwright’s JavaScript API merely by using an Elixir browser-testing library. Your application needs a verified bridge to a browser process, such as a maintained integration that supports the browser, driver, and screenshot operation you require. The reviewed material does not verify a direct Elixir binding for Playwright or provide a complete Elixir invocation recipe.
Wallaby: useful for browser tests, not a verified full-page API here
Wallaby is an Elixir browser-testing project. Its repository documentation describes setup and lists Elixir 1.17+ and OTP 26+ for the documented release state; these requirements are version-sensitive and should be checked against the release you install. The available documentation does not demonstrate that a Wallaby session can call Playwright’s fullPage: true option.
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
Therefore, do not write an Elixir example that assumes a function such as Wallaby.take_screenshot(full_page: true) exists unless the exact Wallaby version and driver documentation confirm it. First verify all three parts of your chosen stack:
- Which Elixir package starts or connects to the browser.
- Which browser and driver are supported by that package.
- Whether its screenshot function exposes a full-document or full-page option.
Decision guide
| Need | Best-established path | Evidence boundary |
|---|---|---|
| A full scrollable screenshot | Playwright’s page.screenshot with fullPage: true. |
This API is documented for Playwright. |
| Elixir test-session control | Wallaby or another Elixir browser library selected for your project. | Confirm its current screenshot and driver APIs; full-page support is not established here. |
| An HTTP call from Elixir without browser orchestration | A screenshot service such as ScreenshotNeo. | Use the service’s documented request and response behavior. |
Preparing a reliable full-page capture
- Choose the output format. PNG is convenient for lossless UI comparisons; JPEG or WebP can reduce storage. Playwright’s screenshot options include output controls such as quality and scale.
- Set a deterministic viewport. A fixed width changes responsive layout and therefore changes the resulting page height.
- Wait for meaningful readiness. Navigate with an appropriate wait condition, then wait for a page-specific selector or application state when content is rendered after navigation.
- Account for lazy content. A page may load images only as they approach the viewport. A full-page operation is not a guarantee that every application-specific lazy loader has completed; wait for the relevant content or trigger the loader using your verified browser integration.
- Capture after state changes. Close consent dialogs, sign in where authorized, select the intended theme, or apply test data before calling the screenshot method.
- Save and validate. Check that the file exists, has non-zero size, and has the expected dimensions before publishing it or using it in a visual test.
Calling a screenshot service from an Elixir application
If browser setup is the uncertain part of your Elixir project, an HTTP screenshot API can keep the integration at the request layer. ScreenshotNeo returns a screenshot or PDF from a GET request and supports PNG, JPEG, and WebP output. Its documented API base is https://api.screenshotneo.com/v1/shot.
Use an HTTP client already approved for your application, pass your access key securely, and stream the response to a file. Do not embed an access key in browser-side JavaScript or commit it to source control. The API documentation is at https://screenshotneo.com/docs/.
Or skip the browser setup:
ScreenshotNeo lets you request a full-page capture through one call. Its full-page option loads lazy images, and its cleanup step accepts cookie or consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets before the shot. Each cleanup step can be disabled when you need the unmodified page.
Recommended Free Tools
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
The same request in Python:
import requests
r = requests.get(
"https://api.screenshotneo.com/v1/shot",
params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"},
timeout=90,
)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)
And in Node.js:
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = Buffer.from(await res.arrayBuffer());
await import('node:fs/promises').then(fs => fs.writeFile('shot.webp', data));
For an Elixir implementation, translate the same GET request with your chosen HTTP client and write the binary response to a file. Keep the request timeout long enough for the target page, and inspect response headers. ScreenshotNeo reports whether the page was cleanly captured and whether it was billed through X-Page-Verdict and X-Billed. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed.
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
The service also provides an MCP server with take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients. Additional options include CSS-selector element capture, dark mode, device presets, arbitrary viewports, retina scale, PDF paper and page controls, custom CSS and JavaScript, pre-capture clicks, selector or network-idle waits, request and resource blocking, headers, cookies, user agents, authorization, timezone, geolocation, transparent backgrounds, resizing, chosen cache TTLs, signed image links, asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, a usage API, and an OpenAPI specification. Parameter names used by other screenshot APIs also work, easing migration.
There is a free allowance of 1,000 screenshots per month with no card. Paid plans start at $5 for 3,000 shots; yearly billing gives two months free, and every feature is available on every plan. Create a free ScreenshotNeo account to get started.
Troubleshooting full-page captures
The image contains only the visible viewport
Cause: fullPage was omitted or set to false, which is Playwright’s default. Fix: pass fullPage: true in the same screenshot call that supplies the output path.
The bottom of the page is blank
Cause: content is loaded after navigation, often through lazy loading or client-side rendering. Fix: wait for a reliable selector or application-ready state before capture, and verify that the page actually renders the lower content when scrolled.
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
The screenshot call fails in CI
Cause: the runner lacks a supported browser binary, required system dependencies, write permission, or enough time for navigation. Fix: install the browser required by your selected Playwright release, grant access to the output directory, increase the navigation timeout where appropriate, and record the browser and driver versions used by CI.
A Wallaby example does not compile
Cause: an assumed screenshot function or option is not part of the installed Wallaby version or driver. Fix: consult that version’s API and driver documentation, then either use the supported operation or move the capture to a verified Playwright process or HTTP service.
The service response is not an image
Cause: the target failed to load, triggered a bot check, returned a blank page, or the request was rejected. Fix: inspect the HTTP status and X-Page-Verdict and X-Billed headers, confirm the URL is publicly reachable from the service, and correct authentication or request parameters. Failed loads and bot checks are not billed by ScreenshotNeo.
Performance, reliability, and cost considerations
- Page length affects work. A very tall document requires more rendering and produces a larger file. Use WebP or JPEG where lossless pixels are unnecessary, and resize only after deciding what resolution your consumer needs.
- Determinism matters more than raw speed. Fixed viewport, timezone, locale, authentication state, and wait conditions reduce visual-test noise.
- Cache intentionally. For repeated captures, a chosen cache TTL can avoid unnecessary rendering; disable or shorten caching when freshness is required.
- Separate retries from diagnosis. Retry transient navigation failures, but preserve the verdict and response headers so a bot check is not mistaken for a successful capture.
- Protect credentials. Keep Playwright credentials, service access keys, cookies, and authorization headers in secret storage and redact them from logs.
FAQ
Does full-page mean an infinitely tall screenshot?
No. It covers the page’s current scrollable document at capture time. Content that has not rendered, requires interaction, or is blocked by authentication is not magically added.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
Can I claim Wallaby supports Playwright’s fullPage option?
Not from the documented material available here. Verify the exact Wallaby release, driver, and screenshot API before making that claim in application code or documentation.
When should I choose a service instead of launching a browser?
Choose a service when your Elixir code needs a stable HTTP boundary, when browser binaries and drivers are difficult to operate, or when you need built-in cleanup, caching, asynchronous jobs, or bulk capture rather than maintaining that orchestration yourself.
Frequently Asked Questions
What is the minimal Playwright setting for a full-page screenshot?
Pass fullPage: true to page.screenshot, for example await page.screenshot({ path: "page.png", fullPage: true }).
Is there a verified direct Elixir Playwright binding in this guide?
No. The documented API is Playwright’s JavaScript API; the Elixir bridge must be selected and verified for your own browser, driver, and package versions.
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.

