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 reinstallSet fullPage: true in Puppeteer’s page.screenshot() call. Add a path to save the image to disk. The key part is await page.screenshot({ path: 'page.png', fullPage: true });.
Capture and save the full page
Install Puppeteer in your Node.js project, then launch a browser, open a page, navigate to the target URL, and take the screenshot. This ES module example writes a PNG and closes the browser even if navigation or capture fails:
As an Amazon Associate I earn from qualifying purchases.
import puppeteer from 'puppeteer';
const browser = await puppeteer.launch();
try {
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({ path: 'page.png', fullPage: true });
} finally {
await browser.close();
}
The Puppeteer screenshot guide demonstrates this launch, navigate, capture, and close workflow. fullPage is an optional boolean; it defaults to false, so set it to true when you want the full page rather than the viewport. The screenshot type is inferred from the filename extension, and PNG is the documented default type. See the Puppeteer screenshot guide and ScreenshotOptions API reference.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Wait for the page content you need
page.goto() waits according to its navigation setting. The guide’s example uses waitUntil: 'networkidle2', but that is an example rather than a guarantee that every site is ready for capture. Pages may render content asynchronously or load sections as the user scrolls. If the page has a known readiness signal, wait for it before taking the screenshot:
await page.goto('https://example.com');
await page.waitForSelector('#main-content');
await page.screenshot({ path: 'page.png', fullPage: true });
Replace #main-content with a selector that indicates the content you need has appeared. Puppeteer’s full-page setting does not itself guarantee that lazy-loaded or infinite-scroll content has been fetched.
Choose a file or in-memory image data
Provide path when the image should be saved to disk. Without a path, Puppeteer does not write a file; the screenshot call returns image data. The API supports returned Uint8Array bytes, or a base64 string when using the encoding: 'base64' overload. Consult the Page.screenshot API reference for the return types.
Rank #2
const imageBytes = await page.screenshot({ fullPage: true });
// imageBytes is suitable for passing to code that consumes image bytes.
Use a filename extension that matches the desired output. Puppeteer documents PNG as the default; the screenshot options also support JPEG and WebP types. JPEG/WebP quality can be set from 0 to 100, but quality does not apply to PNG.
Recommended Free Tools
Useful screenshot options
fullPage: truecaptures the full page; its default isfalse.pathwrites the image to a file. If omitted, the image is not saved to disk.typeselects the screenshot format; otherwise, the type is inferred frompath, with PNG documented as the default.qualitysets JPEG or WebP quality from 0 to 100; it does not apply to PNG.cliplimits capture to a specified region.captureBeyondViewportis documented as defaulting tofalsewhen there is no clip andtrueotherwise.- Other documented options include
encoding,fromSurface,omitBackground, andoptimizeForSpeed. Check the API reference for their accepted values and behavior before relying on them.
Capture one element instead of the whole page
For a single element, use an element handle’s screenshot() method rather than page.screenshot({ fullPage: true }). Puppeteer scrolls the element into view if needed; capture throws if the element has been detached from the DOM.
const element = await page.waitForSelector('.receipt');
if (!element) throw new Error('Receipt element was not found');
await element.screenshot({ path: 'receipt.png' });
See the ElementHandle.screenshot API reference.
Browser cleanup and concurrent captures
Close the browser when the capture is finished so the browser process does not remain open. The try/finally pattern in the example ensures cleanup on errors as well as successful captures.
Puppeteer documents that, during a screenshot operation in a BrowserContext, calls such as newPage() and close() wait for the screenshot to finish. bringToFront() does not wait. This matters when coordinating concurrent browser work; see the Page API reference.
Rank #4
Troubleshooting
- The image shows only the viewport: Set
fullPage: true; the option defaults to false. - No image file appears: Supply a
path, such aspage.png. Without it, consume the returned image data instead. - The screenshot is missing content: Wait for the relevant selector or application readiness condition before capture. A navigation wait mode is not a universal signal that every dynamic section is ready.
- An element screenshot throws: The element may have been detached from the DOM. Find it again after the page updates, then capture the current handle.
- PNG quality settings seem ineffective: The documented
qualityoption does not apply to PNG; choose JPEG or WebP if you need that setting.
Or skip the browser setup
ScreenshotNeo is a website screenshot API: send one GET request with a URL to get an image or PDF, without launching Puppeteer yourself. For example, this cURL command saves a WebP screenshot of example.com:
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorscurl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp
See the ScreenshotNeo API documentation for setup and options. It accepts cookie and consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each of those steps can be turned off. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed, and responses identify the page verdict and billing status in headers. Its MCP server provides screenshot tools for AI agents, including Claude, Cursor, and other MCP clients. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000.
Sign up for ScreenshotNeo’s free plan.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Frequently Asked Questions
Which Puppeteer version do the cited API pages document?
The reviewed Puppeteer documentation showed version 25.12.0.
Best Value
Can I capture an element that is outside the current viewport?
Yes. ElementHandle.screenshot() scrolls the element into view if needed before capturing it.
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.




