Before taking a Puppeteer screenshot, wait for the page’s font set with await page.evaluate(() => document.fonts.ready). Puppeteer waits for the promise returned by page.evaluate(), so the capture starts after the browser has finished the relevant font-loading and layout work.
Wait for fonts, then take the screenshot
Navigate to the page and let it apply the styles and content that use the web font. Then await document.fonts.ready in the page context before calling page.screenshot():
await page.goto(url);
await page.evaluate(() => document.fonts.ready);
await page.screenshot({ path: 'page.png' });
document.fonts is the document’s FontFaceSet. Its ready promise resolves when font loading and layout operations are complete and no further font loads are needed. Puppeteer’s Page.evaluate() waits for a returned promise to resolve. MDN explains the readiness promise, and Puppeteer documents promise handling in Page.evaluate().
With a navigation wait condition
You can also wait for a navigation condition before checking fonts:
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →#1 Best Overall
- CRISP CLARITY: This 23.8″ Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
- INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
- THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
- WORK SEAMLESSLY: This sleek monitor is virtually bezel-free on three sides, so the screen looks even bigger for the viewer. This minimalistic design also allows for seamless multi-monitor setups that enhance your workflow and boost productivity
- A BETTER READING EXPERIENCE: For busy office workers, EasyRead mode provides a more paper-like experience for when viewing lengthy documents
await page.goto(url, { waitUntil: 'networkidle2' });
await page.evaluate(() => document.fonts.ready);
await page.screenshot({ path: 'screenshot.png', fullPage: true });
networkidle2 is a navigation condition, not a replacement for waiting on the font set. A page can reach that condition while font readiness still needs to be checked. Puppeteer’s screenshot guide shows navigation followed by Page.screenshot().
When to request a particular font explicitly
Usually, the page’s CSS and content trigger the font request; waiting for document.fonts.ready is then appropriate. If the page has not yet used the desired face, or the capture must include a particular family and text, explicitly request matching faces with document.fonts.load(), then wait for readiness:
Rank #2
- CRISP CLARITY: This 22 inch class (21.5″ viewable) Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
- 100HZ FAST REFRESH RATE: 100Hz brings your favorite movies and video games to life. Stream, binge, and play effortlessly
- SMOOTH ACTION WITH ADAPTIVE-SYNC: Adaptive-Sync technology ensures fluid action sequences and rapid response time. Every frame will be rendered smoothly with crystal clarity and without stutter
- INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
- THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
await page.evaluate(async () => {
await document.fonts.load('16px "Example Sans"', 'Sample text 123');
await document.fonts.ready;
});
await page.screenshot({ path: 'page.png' });
Replace Example Sans with the family name used by the page’s CSS, and choose representative text containing the characters needed in the screenshot. The text argument limits matching based on Unicode ranges; it does not verify that every requested glyph is available. FontFaceSet.load() returns a promise that fulfills with loaded font faces or rejects if a font fails. See MDN’s FontFaceSet.load() reference.
What font readiness does—and does not—guarantee
document.fonts.ready tells you that font loading and layout work for the document have settled. It does not prove that a particular CSS family was selected for the captured text or that a specific font resource loaded successfully. Some declared faces may remain unloaded if they are not used, including optional fonts that did not load in time. The browser may therefore be ready while text still renders in a fallback font. See MDN’s description of FontFaceSet.ready and its FontFaceSet reference.
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 reinstallRank #3
- Clear visuals. Fluid motion: A 144Hz refresh rate and 1ms MPRT deliver smooth, tear‑free motion across work, gaming, and streaming for clearer, more fluid viewing.
- Eye comfort: TÜV Rheinland 3‑star* certification reduces harmful blue light while preserving stunning color quality without compromise. *TÜV Rheinland 3-star eye comfort certification.
- Wide viewing angle: Get consistent views across a wide 178° /178° viewing angle.
- In-Plane Switching (IPS): See excellent color accuracy and consistency across wide viewing angles with In-plane Switching (IPS) technology.
- Ultra-thin bezels: Maximize your viewing experience with thin bezels.
Screenshot and PDF font options are different
Puppeteer documents waitForFonts as a PDFOptions setting. It defaults to true for PDF generation and waits for document.fonts.ready; its documentation notes that bringing a page to the foreground with Page.bringToFront() may be necessary when it is in the background. This is PDF-specific guidance. Do not pass waitForFonts as a screenshot option: the documented PDF options and screenshot API are separate.
Troubleshoot fallback fonts in the screenshot
- The screenshot still uses a fallback: inspect the element’s computed
font-familyand confirm the intended face applies to the captured text. A completeddocument.fonts.readypromise does not establish that CSS selected the font you expected. - The intended face has not been requested: call
document.fonts.load()with the page’s actual CSS font shorthand and representative text, then awaitdocument.fonts.ready. - The font request fails: handle a rejection from
document.fonts.load()and check the font resource and page configuration. The browser promise cannot make an unavailable or failed font render successfully. - A face remains unloaded: check whether the captured content actually uses it. Declared but unused faces need not load before the font set becomes ready.
Or skip the browser setup
For a one-call capture, ScreenshotNeo provides a website screenshot API. Its API returns a screenshot or PDF; the call below requests a WebP capture of https://stripe.com. See the ScreenshotNeo API documentation for request options.
Rank #4
- CURVED FOR ENHANCED ENGAGEMENT: An immersive viewing experience with a curved monitor that wraps more closely around your field of vision; It creates a wider view, enhancing depth perception and minimizing peripheral distraction
- SMOOTH PERFORMANCE FOR SEAMLESS CONTENT: Stay in the action when playing games, watching videos, or working on creative projects; The 100Hz refresh rate reduces lag and motion blur so you don't miss a thing in fast-paced moments¹
- MORE GAMING POWER: Gain the edge with optimizable game settings; Color and image contrast can be adjusted to see scenes more vividly and spot enemies hiding in the dark; Game Mode adjusts any game to fill the screen so you can view every detail²
- KEEP IT EASY ON THE EYES: Care for your eyes and stay comfortable, even during long sessions; Advanced eye comfort technology certified by TÜV reduces eye strain by minimizing blue light and reducing irritating screen flicker²
- INCREASED VERSATILITY: Connect to more; Plug devices straight into your monitor for increased flexibility, making your computing environment even more convenient
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
- It accepts cookie or consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each cleanup step can be turned off.
- Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed. Responses indicate the page verdict and billing status in headers.
- An MCP server gives AI agents tools for screenshots, page information, and PDF capture.
- The Free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots.
Sign up free for 1,000 screenshots a month with no card.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Frequently Asked Questions
Does Puppeteer’s screenshot API support `waitForFonts`?
The documented `waitForFonts` option belongs to PDF generation, not the screenshot API. For screenshots, await `document.fonts.ready` in `page.evaluate()` before capturing.
Recommended Free Tools
Best Value
- 【INTEGRATED SPEAKERS】Whether you're at work or in the midst of an intense gaming session, our built-in speakers provide rich and seamless audio, all while keeping your desk clutter-free.
- 【EASY ON THE EYES】 Protect your eyes and enhance your comfort with Blue-Light Shift technology. This feature reduces harmful blue light emissions from your screen, helping to alleviate eye strain during long hours of use and promoting healthier viewing habits.
- 【WIDEN YOUR PERSPECTIVE】Our sleek minimal bezel design ensures undivided attention. The nearly bezel-free display seamlessly connects in a dual monitor arrangement, delivering an unobstructed view that lets you focus on more at once, completely distraction-free.
Does `document.fonts.ready` ensure every declared font has loaded?
No. It resolves after the document’s needed font loading and layout work settles; declared faces that are not used may remain unloaded.
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.

