The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →The most direct way to capture an entire webpage in Python is Playwright. Set full_page=True on page.screenshot(); Playwright then captures the page’s full scrollable area instead of only the visible viewport. The option works with both synchronous and asynchronous Python APIs.
Use Playwright’s full-page option
Install Playwright in your Python project, launch a browser, navigate to the page, and pass full_page=True when saving the image. The official Playwright screenshots guide documents both calling styles.
page.screenshot(path='screenshot.png', full_page=True)
For asynchronous code, the equivalent is:
await page.screenshot(path='screenshot.png', full_page=True)
Without that argument, the Page API defaults full_page to False, so only the current viewport is captured.
Set up a Python project
- Create or activate a virtual environment for the project.
- Install the Playwright package with
pip install playwright. - Install the browser binaries required by your Playwright installation with
playwright install. - Run a script that launches a browser, opens the target URL, takes the screenshot, and closes the browser.
Playwright is software-based browser automation; a special physical capture device is not required. Keep the Playwright package and browser binaries managed together so that an upgrade does not leave your environment with mismatched components.
#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.
Complete synchronous example
This self-contained script opens a page, captures its complete scrollable document, writes a PNG, and shuts down the browser even in a normal successful run.
from playwright.sync_api import sync_playwright
TARGET_URL = 'https://example.com'
OUTPUT_FILE = 'example-full-page.png'
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto(TARGET_URL)
page.screenshot(path=OUTPUT_FILE, full_page=True)
browser.close()
print(f'Saved {OUTPUT_FILE}')
The key call is page.screenshot(..., full_page=True). path tells Playwright to save the image. If you omit path, the method returns screenshot bytes instead, which is useful when another part of your program uploads or transforms the image.
Complete asynchronous example
Use the async API when your application already runs an event loop or needs to capture several pages without blocking other work.
import asyncio
from playwright.async_api import async_playwright
TARGET_URL = 'https://example.com'
OUTPUT_FILE = 'example-full-page.png'
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto(TARGET_URL)
await page.screenshot(path=OUTPUT_FILE, full_page=True)
await browser.close()
print(f'Saved {OUTPUT_FILE}')
asyncio.run(main())
The asynchronous form uses await for navigation and capture, but the full-page behavior is identical.
Free tools Windows power users keep installed
One-click scans. No signup required.
Understand what Playwright captures
Playwright defines a full-page screenshot as an image of the full scrollable page, as if the page could fit on one very tall screen. It is different from changing the browser window to a very large viewport: the full_page option asks Playwright to capture content beyond the currently visible area.
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.
Viewport versus full page
- Viewport screenshot: leave
full_pageat its default ofFalseto capture only what is visible. - Full-page screenshot: set
full_page=Trueto include the page’s complete scrollable height. - Specific region: use
clipwhen you need a rectangular image region rather than the whole document.
File output versus in-memory bytes
With path='capture.png', Playwright writes the image to disk. With no path, page.screenshot() returns bytes. The latter avoids a temporary file and lets you send the result directly to storage, a test assertion, or an HTTP response.
Choose format, quality, and scale
The Page API supports PNG, JPEG, and WebP output. PNG is lossless and does not use the quality setting. JPEG and WebP accept a quality value, allowing a smaller file at the cost of more compression.
# JPEG with a quality setting
page.screenshot(
path='page.jpg',
type='jpeg',
quality=85,
full_page=True,
)
# WebP output
page.screenshot(
path='page.webp',
type='webp',
quality=80,
full_page=True,
)
scale='css' produces one image pixel per CSS pixel. scale='device' uses device pixels and can produce a denser, larger image on high-density settings. Select the scale deliberately when comparing screenshots or controlling output size.
| Option | What it controls | Important detail |
|---|---|---|
full_page |
Whether to capture the full scrollable page | Defaults to False; set it explicitly for a full-page result |
path |
Destination file | Omit it to receive bytes |
type |
PNG, JPEG, or WebP | Choose the format that matches your storage or delivery needs |
quality |
JPEG/WebP compression quality | Does not apply to PNG |
scale |
CSS pixels or device pixels | css is one image pixel per CSS pixel; device uses device pixels |
clip |
A rectangular image region | Use it for a controlled crop instead of the entire document |
animations |
Animation behavior during capture | 'disabled' stops CSS animations, transitions, and Web Animations according to the documented behavior |
caret |
Whether a text caret is shown | Set it when editing controls would otherwise make captures vary |
timeout |
How long the screenshot operation may wait | Use a suitable value for pages that take longer to render |
style |
A stylesheet override applied for the capture | The Page API documents this capability as added in Playwright v1.41 |
| masks | Locators whose content should be masked | Useful when dynamic values must not appear in a comparison image |
Check the Page API reference for the exact defaults and signatures in the Playwright version installed in your project.
Make captures repeatable
Disable motion
Animated banners and transitions can produce different pixels on every run. Pass animations='disabled' when you need a stable capture:
page.screenshot(
path='stable.png',
full_page=True,
animations='disabled',
)
This is especially useful for visual regression checks. It changes animation behavior only for the capture operation; it does not permanently rewrite your site.
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.
Apply a temporary stylesheet
The API’s style argument lets you inject CSS for the screenshot. For example, you can hide a cursor or a known decorative element without changing application code:
page.screenshot(
path='clean.png',
full_page=True,
style='* { caret-color: transparent !important; }',
)
Mask changing regions
When a page contains timestamps, rotating offers, or other changing values, use the documented masks option with locators. Masking keeps those regions from causing unnecessary visual differences while preserving the rest of the page.
Wait for the page your application needs
page.goto() starts navigation, but modern pages can continue rendering after the initial response. If your own application exposes a reliable “ready” element, wait for that element before calling screenshot(). Choose a wait condition that represents the content you actually need; an arbitrary delay can make a script slower without making it more reliable.
Capture a page or a smaller target
Use full_page=True when the deliverable is the whole document. If the requirement is a single panel, chart, or article element, an element screenshot or a clip rectangle is more efficient and easier to compare. Do not combine a narrow clip with full_page=True unless you have verified that the resulting region matches your intended output.
Performance and reliability considerations
- Very tall documents: a full-page image can be much larger than a viewport image. Prefer WebP or JPEG when lossless PNG is unnecessary, and use
scale='css'when device-pixel density would create an unnecessarily large file. - Deterministic testing: disable animations, mask volatile locators, and keep the same viewport and browser context between runs.
- Timeouts: slow pages may need a larger screenshot timeout. A timeout is a failure to capture, not evidence that the URL itself is invalid.
- Resource cleanup: close the browser after the capture. In long-running services, reuse a controlled browser process where appropriate, but ensure pages and contexts are closed so memory does not grow without bound.
- Access restrictions: a browser automation script sees whatever the page serves to that browser context. Authentication, consent dialogs, or bot checks can therefore change the captured result; handle those states explicitly in your own workflow.
Troubleshoot common failures
“Executable doesn’t exist” or browser launch failure
The Python package is installed, but the matching browser binaries are not. Run playwright install in the same environment, then rerun the script. If your deployment image is rebuilt, include that installation step in the image build.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Repair Windows errors before they cause bigger problems3Fix the driver behind crashes, sound loss and screen glitchesRank #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 image contains only the viewport
Check the actual call being executed. The required argument is full_page=True; setting a large viewport alone does not request a full scrollable capture. Also verify that you are calling page.screenshot() on the page that navigated to the target URL.
The screenshot times out
Increase the screenshot timeout only after identifying why the page is slow. A page that has not reached the state your workflow needs may require an application-specific readiness wait. Keep the timeout finite so a broken page does not stall a batch indefinitely.
Dynamic content changes between runs
Disable animations with animations='disabled', mask changing locators, and apply a temporary stylesheet where appropriate. Use the same viewport, scale, and output format for every comparison.
The file is unexpectedly large
Switch from PNG to WebP or JPEG, set an appropriate quality, and consider scale='css'. If you need only a component, capture that element or use clip instead of the entire document.
The page looks incomplete
Confirm that your script waits for the content your application renders after navigation. Check the URL, authentication state, and any consent or bot-check screen in the captured image before treating the result as a Playwright rendering problem.
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.
Or skip the browser setup
If you only need a reliable URL-to-image request, ScreenshotNeo provides a website screenshot API and MCP server. A single GET request returns PNG, JPEG, WebP, or a PDF; its full-page capture can load lazy images, and it also supports custom CSS and JavaScript, waits, device and viewport settings, and many other capture controls. See the ScreenshotNeo API documentation beside the code.
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 from Python is:
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 from 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(`Screenshot failed: ${res.status}`);
const fs = await import('node:fs/promises');
await fs.writeFile('shot.webp', Buffer.from(await res.arrayBuffer()));
ScreenshotNeo removes cookie and consent banners, newsletter popups, and chat widgets before the shot. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed, and response headers identify the page verdict and billing status. Its MCP server lets AI agents such as Claude or Cursor call 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 screenshots. Create a free ScreenshotNeo account to start.
Frequently asked questions
Does a full-page screenshot change the browser’s viewport?
No. It requests an image of the document’s scrollable area; configure the viewport separately when you need a particular responsive layout.
Recommended Free Tools
Can I capture a PDF instead of an image?
Playwright’s page.screenshot() produces image bytes or an image file. For a PDF response from a URL, use a PDF-capable service such as ScreenshotNeo’s capture_pdf tool or API output.
Which Playwright version should I use?
Use the API reference that matches the Playwright version installed in your project. Options and defaults can change, so do not copy a parameter from a different version without checking that reference.
Frequently Asked Questions
Does a full-page screenshot change the browser’s viewport?
No. It captures the document’s scrollable area; set the viewport separately for a specific responsive layout.
Can I capture a PDF instead of an image?
Playwright’s screenshot method returns images. Use a PDF-capable workflow when the required output is a PDF.
Which Playwright version should I use?
Check the Page API reference for the exact version installed in your project because option defaults can differ between 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.

