Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

If ₹ appears as a box in a Puppeteer screenshot, Chrome could not find a usable glyph for that character when it rendered the page. The usual fixes are to verify the character is U+20B9, ensure the selected web or system font contains that glyph, and wait for fonts and page content to load before calling page.screenshot(). If it fails only in CI, check the fonts and browser environment inside the actual container—not just on your workstation.

Why the rupee symbol becomes a box

The rupee sign is ₹, Unicode U+20B9. A box (often called a tofu glyph) generally means the font Chrome selected does not contain that character, or the intended font was not available when rendering occurred. Those problems can overlap: a CSS font stack might lack a suitable fallback, while a web font request might still be pending or have failed.

A font family name in CSS does not guarantee that the font file selected at runtime has every glyph your text needs. Browsers move through the CSS font stack when a font lacks a character; the fallback font must itself support U+20B9. Noto’s guidance describes this fallback behavior and explains its font-installation and CSS-use options (Noto Fonts: Use Noto fonts). Do not infer support for this particular currency character solely from a font’s name or script coverage.

Diagnose the character, font, and capture environment

1. Confirm the character is actually U+20B9

Inspect the string supplied to the page and the rendered text. Make sure it contains ₹ rather than a visually similar character, a replacement character, or incorrectly decoded data. The intended character can be written directly in HTML as ₹ or as the entity ₹. If the page receives text from an API or database, verify the value at the point it enters the page as well as in the source data.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Lavsoul 4K Webcam with Microphone for PC & Streaming Computer Camera
  • ULTRA HD 4K CLARITY: Stand out in every video call with breathtaking 4K video at 30fps or smooth 1080p at 60fps. Powered by a premium 1/2.5" CMOS sensor and a wide f/1.78 aperture, this webcam captures every detail with vibrant color and stunning low-light performance-so you always look your best
  • FAST AUTOFOCUS & SMART LIGHT CORRECTION: No more blurry moments with this webcam for PC. Advanced Phase Detection Auto Focus (PDAF) locks onto your face instantly and keeps you sharp-even when you move. Built-in light correction adapts to your environment, balancing brightness and contrast for a flawless image in dim rooms or bright spaces
  • DUAL NOISE-CANCELING MICS: Speak with confidence using this webcam with microphones. Dual microphones with intelligent noise-canceling tech isolate your voice and reduce background noise-suitable for webinars, live streams, team meetings, and virtual interviews
  • WIDE-ANGLE LENS & FLEXIBLE MOUNTING OPTIONS: Capture more of your world with an 80 field of view and full 360 swivel rotation. Whether this streaming webcam is mounted on a laptop, monitor, or tripod, it allows you to find the right angle for any setup
  • BUILT-IN PRIVACY COVER & PLUG-AND-PLAY SIMPLICITY: Protect your privacy with a secure sliding lens cover that blocks the camera when not in use. Setup is a breeze-just plug into any USB-A port and start streaming, chatting, or recording instantly. The USB webcam is compatible with Zoom, Microsoft Teams, Skype, OBS Studio, and all major platforms across Windows, macOS, and Linux

2. Inspect the element’s computed font stack

Use Chrome DevTools on the same page and inspect the affected element’s computed font-family. Confirm that the intended family is present and that a later fallback can render U+20B9. Then verify the actual font file selected for the character, rather than assuming the first family in the stack has it. A basic CSS pattern is:

.price {
  font-family: "Your Web Font", "Noto Sans", sans-serif;
}

This is only a pattern, not a guarantee: choose a fallback available in the target runtime and test that its installed file covers U+20B9. Noto’s specimen documentation discusses Noto Sans Devanagari coverage, but a script specimen alone does not verify the exact font file available to your Chrome process or prove coverage of every currency symbol (Noto Sans Devanagari specimen).

3. Check web-font requests and readiness

If the site uses a web font, inspect the browser’s Network panel and console for failed font requests, blocked cross-origin requests, or decoding errors. Wait for the page’s font-loading set to be ready before capture, and also wait for the specific content that contains the rupee amount.

Puppeteer’s screenshot guide shows navigation followed by Page.screenshot(), but does not promise that a screenshot call automatically waits for web fonts (Puppeteer Screenshots). In contrast, Puppeteer’s PDF guide explicitly documents a default font wait for Page.pdf(); that statement applies to PDF generation and should not be assumed for screenshots (Puppeteer PDF generation).

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
10.1 Inch Mini Netbook, Quad-Core Processor Laptop Computer, 2GB Memory 64GB Storage Android 12 Portable Notebook Built-in Webcam, WiFi & Bluetooth Keyboard & Mouse for Home Schooling & Office Work
  • 【Efficient Quad-Core Performance】 Powered by a 1.8GHz Quad-Core processor, this mini laptop ensures smooth multitasking. With 2GB RAM and 64GB ROM (expandable to 1TB), it handles daily work and online tasks with ease.
  • 【10.1" HD IPS Display & GMS Support】 Featuring a 1280x800 HD IPS screen, this cheap laptop delivers vibrant visuals. Pre-installed with Android OS and GMS, you get direct access to the Google Play Store for apps.
  • 【Ultra-Portable & Lightweight Design】 Weighing only 1.76 lbs, this Blue computer is designed for mobility. Its compact form makes it an ideal companion for students and professionals for home schooling or trips.
  • 【Versatile Connectivity Options】 Stay productive with dual USB 2.0 ports, a headphone jack, and a TF card slot. This computer for kids and adults features built-in Wi-Fi and Bluetooth for stable connections.
  • 【Complete All-in-One Bundle】 This kid laptop kit includes the laptop, carrying bag, mouse, mouse pad, and power adapter. It is the perfect ready-to-use set for online classes, remote work, and entertainment.

4. Test inside the browser runtime that takes the screenshot

A font installed on a developer’s laptop may be absent from a Linux CI runner or Docker image. Test the rupee character using the same browser process, operating system image, and font configuration as the failing capture. Puppeteer’s Linux troubleshooting page lists libfontconfig1 among common Chrome dependencies and identifies font packages for some distributions; it does not establish that one package universally fixes U+20B9 (Puppeteer Troubleshooting).

For a containerized job, include the selected font files and appropriate system font configuration in the image that launches Chrome. Depending on the OS and setup, new fonts may require a refreshed cache or application restart; Noto’s usage guidance notes that some applications recognize newly installed fonts only after a cache update, while others need restarting. Verify the result from a fresh browser process.

Wait for fonts before taking a Puppeteer screenshot

After navigation, wait for the page’s relevant content and for its fonts to finish loading. For example, with a page whose content and fonts are expected to load during navigation:

import puppeteer from 'puppeteer';

const browser = await puppeteer.launch({ headless: true });
try {
  const page = await browser.newPage();
  await page.goto('https://example.com', { waitUntil: 'networkidle0' });

  // Wait for web fonts used by the document to finish loading.
  await page.evaluate(() => document.fonts.ready);

  // If the price is rendered asynchronously, wait for it explicitly too.
  await page.waitForSelector('.price');

  await page.screenshot({ path: 'page.png', fullPage: true });
} finally {
  await browser.close();
}

Replace the example URL and selector with your page and the element that displays the rupee symbol. document.fonts.ready helps when the document’s font-loading work is still in progress; it cannot make a missing font file appear or add a glyph to a font that lacks one. The selector wait addresses content readiness, which is separate from font readiness. If fonts are loaded only after an interaction or application state change, trigger that state before waiting and capturing.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Sale
Logitech C920x HD Pro Webcam, Full HD 1080p/30fps - Black w/Blue Yeti USB Microphone - Blackout
  • Webcam comes with a 3-month XSplit VCam license and no privacy shutter. XSplit VCam lets you remove, replace and blur your background without a Green Screen.
  • Full HD 1080p video calling and recording at 30 fps - You’ll make a strong impression when it counts with crisp, clearly detailed and vibrantly colored video.
  • Stereo audio with dual mics - Capture natural sound on calls and recorded videos.
  • Custom three-capsule array: This professional USB mic produces clear, powerful, broadcast-quality sound for YouTube videos, Twitch game streaming, podcasting, Zoom meetings, music recording and more
  • Blue VOICE software: Elevate your streamings and recordings with clear broadcast vocal sound and entertain your audience with enhanced effects, advanced modulation and HD audio samples

Puppeteer’s documented screenshot API is Page.screenshot(); navigation wait conditions are useful, but a navigation event alone should not be treated as proof that the correct font loaded (Puppeteer Screenshots).

Choose the repair path that matches the cause

Repair Use it when Verify
Fix the CSS stack or web-font loading The page is meant to supply its own font, or Chrome is selecting an unsuitable family. The font request succeeds, the actual font file contains U+20B9, and a working fallback is available.
Install and configure runtime fonts The capture environment is missing a suitable local font, especially when the issue appears only in CI or a container. The same browser runtime used for capture can render U+20B9 after the font installation, cache refresh if needed, and browser restart.

These causes are not mutually exclusive. A reliable fix can require both a font that contains the glyph and a CSS stack that allows Chrome to select it.

Keep Puppeteer captures reproducible across machines

Record the browser version, operating system or container base image, and installed font files alongside screenshot-test results. Also note whether the page’s fonts are local or fetched over the network, since a missing package and an unreachable web-font host can look similar in the final image.

The browser setup depends on which Puppeteer package you use: the puppeteer package downloads a compatible Chrome for Testing browser, while puppeteer-core does not download Chrome and leaves browser management to you. That makes the latter’s browser installation and version part of your environment to control (Puppeteer Installation).

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
Webcam Cover for Logitech C920 C930e c922x Lens Privacy Shutter Slider
  • Compatible with Logitech C920x HD Pro Webcam, Full HD 1080p/30fps Video Calling. Compatible with Logitech C920 Hd Pro Webcam. Compatible with Logitech HD Pro Webcam C920 Widescreen Video Calling and Recording Webcam.
  • Compatible with Logitech C930e Webcam. Compatible with Logitech C922 Pro Stream Webcam 1080P Camera for HD Video Streaming. Compatible with Logitech Privacy Cover for C920 and C930e.
  • This webcam cover conveniently blocks your camera cover to protect your privacy.
  • This also compatible with other popular webcams. This is also known as webcam lid, webcam cap, webcam protector, web camera privacy cover.
  • ienza is a registered trademark and a registered Amazon brand. Use of the ienza trademark without the prior written consent of ienza, LLC. may constitute trademark infringement and unfair competition in violation of federal and state laws. ienza products are developed as cost-effective alternatives to OEM parts. They are not necessarily endorsed by the OEMs
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshooting common failure patterns

The screenshot still shows a box after adding a fallback

  • Confirm the browser actually loaded the CSS rule you changed and that a later, more specific rule is not overriding it.
  • Check the installed fallback font file in the capture environment and test its support for U+20B9. A family name in a CSS stack is not proof that the relevant file is installed or has the glyph.
  • Check that the text is really U+20B9 and not a different character produced by encoding or data conversion.

The symbol works locally but fails in CI

  • Compare the Chrome version, OS or container base image, font packages, and font configuration between the working and failing environments.
  • Check whether CI can reach the host serving the page’s web fonts; inspect request failures rather than treating the problem as a missing local package by default.
  • Install the required font in the image used by the browser, refresh the font cache if that setup requires it, and launch a fresh browser process for a retest.

The screenshot intermittently captures a box

  • Wait for the page’s relevant content and document.fonts.ready before capturing.
  • Inspect font requests for slow responses, errors, or inconsistent network access.
  • If an application loads the price or changes fonts after navigation, wait for that state explicitly; a navigation wait condition does not establish that later work is complete.

A screenshot is fixed, but a PDF behaves differently

Keep the output path in mind: Puppeteer’s documentation explicitly says Page.pdf() waits for fonts by default, while its screenshot guide does not make that promise for Page.screenshot(). Use output-specific readiness checks rather than assuming the two capture methods have identical behavior (Puppeteer PDF generation).

Or skip the browser setup

If you want a hosted capture rather than managing Chrome and fonts yourself, ScreenshotNeo is a website screenshot API and MCP server. Its clean-shot steps accept cookie or consent banners and remove more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and responses include X-Page-Verdict and X-Billed headers. AI agents can use its MCP tools: take_screenshot, get_page_info, and capture_pdf.

One GET request returns an image or PDF. See the ScreenshotNeo API documentation for request options and setup:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

ScreenshotNeo offers 1,000 screenshots a month free with no card; paid plans start at $5 for 3,000 screenshots. A hosted screenshot does not change the font available to your own Puppeteer process, so use the self-hosted troubleshooting steps when the goal is to fix your local or CI capture.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Sign up for ScreenshotNeo’s free plan to try 1,000 screenshots a month without a card.

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.