For a documented full-page screenshot in Python, use Firefox WebDriver’s full-document screenshot method. ChromeDriver’s ordinary Selenium screenshot helper is documented as capturing the current browser window, so do not assume it includes the entire page. Maximize or fullscreen changes the window; it does not guarantee full-document capture. If you use Chrome, verify the image actually contains the whole page—or use Firefox’s explicit API when full-page capture is essential.
What counts as a full-website screenshot?
A full-page screenshot includes the document from its top to its bottom. A viewport screenshot includes only the part currently visible in the browser window. These are different outputs: a page can be much taller than the viewport, and a screenshot method’s scope depends on the browser driver and API rather than simply on how large the window appears.
Selenium’s window and tab documentation describes screenshot and window-control operations separately. In particular, maximize_window() and fullscreen are window controls, not instructions to capture every pixel of a long document. The safest practice is to choose an API whose documented scope matches the output you need, then inspect the resulting image.
Which driver should you use?
| Driver and API evidence | What the documented method captures | Practical choice |
|---|---|---|
| FirefoxDriver, Selenium Python API 4.49.0 | Explicit full-document screenshot methods; file output is PNG. | Use the full-page method when you need a page-length image. |
| ChromeDriver, Chromium Python screenshot helpers | The current browser window. | Use for a viewport image. Do not label it full-page without checking the result. |
| Selenium JavaScript WebDriver API | Best effort: prefers the entire page, but may fall back to the current window, visible frame, or display. | Not a guarantee that a particular ChromeDriver capture includes the full document. |
The method names and scope above come from Selenium’s FirefoxDriver Python API, Chromium screenshot documentation, and JavaScript WebDriver API, respectively. They describe the documented APIs, not a universal promise about every language binding, browser version, or page. Check the API reference for the binding and version you actually run.
Free tools Windows power users keep installed
One-click scans. No signup required.
#1 Best Overall
Capture the full page with FirefoxDriver in Python
The Python FirefoxDriver API documents get_full_page_screenshot_as_file(path), which saves a PNG when the path ends in .png. The following example requests a full-document capture and always closes the driver, including if navigation or capture fails.
Prerequisites
- Install Python and the Selenium package in the environment running the script.
- Install Firefox and make a compatible Firefox driver available to Selenium. Driver and browser setup can vary by operating system and Selenium version; use Selenium’s current browser setup guidance for your environment.
- Choose a destination directory that exists and is writable. The screenshot path must end in
.png.
Runnable Python example
from pathlib import Path
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
url = "https://example.com"
output = Path("full-page.png")
options = Options()
options.add_argument("-headless") # Remove this line to watch Firefox.
driver = webdriver.Firefox(options=options)
try:
driver.get(url)
saved = driver.get_full_page_screenshot_as_file(str(output))
if not saved:
raise RuntimeError(f"Firefox did not save the screenshot to {output}")
print(f"Saved full-page PNG to {output.resolve()}")
finally:
driver.quit()
This uses Firefox’s explicit full-page method rather than trying to simulate it by enlarging the browser window. The cited Python API also lists save_full_page_screenshot(path), get_full_page_screenshot_as_png() for PNG bytes, and get_full_page_screenshot_as_base64() for Base64-encoded image data. Use the output form that fits your pipeline; these names are documented for the referenced Python API and should not be assumed to exist in every binding.
Rank #2
Capture a ChromeDriver screenshot—and understand its limit
Selenium’s documented Chromium Python screenshot helpers capture the current window. This example is appropriate when a viewport image is acceptable; it is not a reliable recipe for a full-document image. In a tall page, content below the visible browser area may be absent.
from pathlib import Path
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
url = "https://example.com"
output = Path("chrome-window.png")
options = Options()
options.add_argument("--headless") # Remove this line to watch Chrome.
driver = webdriver.Chrome(options=options)
try:
driver.get(url)
if not driver.save_screenshot(str(output)):
raise RuntimeError(f"Chrome did not save the screenshot to {output}")
print(f"Saved current-window PNG to {output.resolve()}")
finally:
driver.quit()
Do not treat driver.maximize_window() or browser fullscreen as a full-page workaround: those change window state and do not establish that the screenshot contains the whole document. Selenium’s JavaScript WebDriver describes screenshot capture as best-effort and prefers the entire page before falling back to narrower scopes, but that wording is not a browser-specific guarantee for a ChromeDriver call. If completeness matters, choose Firefox’s explicit full-page Python API or validate the Chrome output on the exact setup you intend to use.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Rank #3
Check that the saved image really contains the page
Regardless of driver, inspect the output rather than inferring its scope from a successful return value. A successful save means an image was written; it does not by itself establish that the page bottom or all important content is present. For automated jobs, record the image’s pixel dimensions and keep a representative image from each class of page for visual review.
Page behavior can affect what a point-in-time capture shows. The Selenium references cited here do not establish universal handling for lazy-loaded images, sticky or fixed elements, animations, frames, very long pages, or cross-origin content. For pages where these matter, validate the actual result and the site’s behavior in your chosen browser rather than assuming every element will appear as expected.
When a PDF is a better output
If the goal is a printable or archival document, Selenium’s page-print feature can produce a PDF representation. Selenium documents its Chromium print implementation as requiring headless mode. A PDF is not a raster screenshot: it can paginate and render according to print options, so it may not preserve the single continuous image layout you need. Choose it when a document is acceptable, not as a substitute for a screenshot without checking the result.
Rank #4
Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server for developers. Instead of installing and managing browser drivers for a one-off capture, make a GET request with the target URL. Replace YOUR_API_KEY with your key; the example writes the response to a WebP file. See the ScreenshotNeo API documentation for request options.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Equivalent Python and Node.js calls:
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 and consent banners are accepted like a visitor and removed, along with known newsletter popups and chat widgets, before capture; each of those steps can be turned off.
- Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed. Response headers identify the page verdict and billing status.
- An MCP server provides
take_screenshot,get_page_info, andcapture_pdftools for AI agents, including Claude, Cursor, and other MCP clients. - The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 screenshots. Every feature is available on every plan.
Sign up for 1,000 free screenshots a month—no card required.
Best Value
Compatibility, reliability, and cost considerations
Keep Chrome and ChromeDriver aligned
Selenium’s current Chrome guidance says Selenium 4 is compatible with Chrome 75 and later by default and advises matching the Chrome and ChromeDriver major versions. These are setup facts that can change, so check the current Selenium Chrome documentation when installing or upgrading. A mismatch can prevent the browser session from starting; do not diagnose a screenshot-scope problem until the driver can launch and navigate successfully.
Budget for what the job actually needs
With Selenium, the capture runs in a browser and driver you operate, so your costs and reliability depend on that environment and your job volume. A viewport capture and a full-document capture also are not interchangeable deliverables. For recurring URL capture, consider the maintenance cost of browser and driver setup alongside any service price. ScreenshotNeo’s API billing distinguishes billable clean shots from the listed non-billed outcomes in the response; consult its documentation for the options and integration details relevant to your workload.
Troubleshooting Selenium screenshot problems
- Chrome saves an image but the bottom of the page is missing: the documented Chromium Python helper captures the current window. Use Firefox’s documented full-page API when full-document coverage is required, or validate a Chrome-specific method for your exact binding and version instead of assuming window maximization is enough.
- The Firefox full-page method is not found: verify that the object is a Firefox WebDriver and check the API reference for the installed Selenium Python version. The cited method names are documented in the Selenium Python FirefoxDriver API 4.49.0; do not assume another language binding uses the same names.
- The file is missing or empty: confirm the destination directory exists, the process can write there, and the filename ends in
.pngfor Firefox’s file method. Check the method’s return value and surface exceptions rather than treating a failed save as success. - The page is blank or incomplete: distinguish navigation or rendering trouble from a screenshot-scope limitation. Check that the browser reached the intended URL and inspect the image dimensions and visible content. Lazy images, scripts, frames, and other dynamic behavior need page-specific validation; the cited API descriptions do not guarantee their capture.
- ChromeDriver will not start a session: check that Chrome and ChromeDriver major versions match, then recheck Selenium’s current compatibility guidance. The stated compatibility range is subject to change.
- You receive pages instead of one image: you likely requested PDF/print output. Selenium’s Chromium print feature produces a PDF representation in headless mode; use an image screenshot API when the required artifact is a PNG or another raster image.
Frequently Asked Questions
Does Selenium have one full-page screenshot method that works the same in Python, Java, and JavaScript?
The method names and scope are binding-specific. The explicit full-document methods described here are from Selenium’s Python FirefoxDriver API; check the reference for the particular binding and version you use.
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteWindows 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 reinstallIs a successful screenshot call proof that every page element was captured?
No. It confirms a capture was returned or saved, not that dynamic, framed, or below-the-fold content is complete. Inspect the output for the pages and browser setup that matter to your use case.
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.

