DriversRecommendedOutdated drivers can make a good PC feel brokenScan driver issues before chasing fixes manually.Scan NowOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PC×
Skip to content
World desk7 min

How to Capture a Mobile Website Screenshot After Fonts and Images Load

A reliable mobile screenshot needs more than a navigation event. Wait for the content, fonts, and relevant images—and trigger lazy loading for full-page captures.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

To capture a mobile website after its typography and images are ready, use a browser automation tool such as Playwright: configure a mobile viewport or device profile, wait for the page content you need, await document.fonts.ready, trigger lazy-loaded images if the capture extends below the fold, verify relevant images have loaded, and then take the screenshot. Navigation completion alone—and especially a quiet network—does not prove the page is visually ready.

Capture a mobile screenshot with Playwright

This example uses a fixed mobile viewport and captures the visible screen. Replace the URL and readiness selector with values appropriate to the site. Install Playwright and its browser before running the script; the code uses its Chromium browser.

As an Amazon Associate I earn from qualifying purchases.

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const context = await browser.newContext({
    viewport: { width: 390, height: 844 },
    deviceScaleFactor: 2,
    isMobile: true,
    hasTouch: true
  });
  const page = await context.newPage();

  try {
    await page.goto('https://example.com', {
      waitUntil: 'load',
      timeout: 30000
    });

    // Replace this with a meaningful element or ready signal on your page.
    await page.locator('main').waitFor({ state: 'visible', timeout: 15000 });

    await page.evaluate(async () => {
      await document.fonts.ready;

      // This checks images in the current document. Failed images resolve too,
      // rather than leaving the capture waiting forever.
      const images = [...document.images];
      await Promise.all(images.map(async image => {
        if (!image.complete) {
          await new Promise(resolve => {
            image.addEventListener('load', resolve, { once: true });
            image.addEventListener('error', resolve, { once: true });
          });
        }
        if (image.complete && image.naturalWidth > 0 && image.decode) {
          try { await image.decode(); } catch {}
        }
      }));
    });

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

The script waits for fonts used by the document, then checks all images present in the document at that point. It does not treat failed image loads as successes: errors stop the wait, and the naturalWidth check prevents decoding an unsuccessful image. For production captures, you may want to record or fail on broken images rather than simply proceed. Set a bounded timeout around readiness work as well as navigation so a broken page cannot hang a job indefinitely.

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

Use a named device profile when its traits matter

An explicit viewport gives predictable CSS dimensions. If the page depends on a particular phone’s viewport, user agent, or touch behavior, use a Playwright device profile instead. The profile supplies emulation settings; check and override its viewport as needed for the dimensions you intend to capture. See Playwright’s device emulation documentation.

#1 Best Overall
Sale
Samsung Galaxy A17 5G Smart Phone 128GB US 1 Yr Manufacturer Warranty Black | Large AMOLED, High-Res Camera, Durable Design, Super Fast Charging, Expandable Storage, Circle to Search, 2025
  • YOUR CONTENT, SUPER SMOOTH: The ultra-clear 6.7" FHD+ Super AMOLED display of Galaxy A17 5G helps bring your content to life, whether you're scrolling through recipes or video chatting with loved ones.¹
  • LIVE FAST. CHARGE FASTER: Focus more on the moment and less on your battery percentage with Galaxy A17 5G. Super Fast Charging powers up your battery so you can get back to life sooner.²
  • MEMORIES MADE PICTURE PERFECT: Capture every angle in stunning clarity, from wide family photos to close-ups of friends, with the triple-lens camera on Galaxy A17 5G.
  • NEED MORE STORAGE? WE HAVE YOU COVERED: With an improved 2TB of expandable storage, Galaxy A17 5G makes it easy to keep cherished photos, videos and important files readily accessible whenever you need them.³
  • BUILT TO LAST: With an improved IP54 rating, Galaxy A17 5G is even more durable than before.⁴ It’s built to resist splashes and dust and comes with a stronger yet slimmer Gorilla Glass Victus front and Glass Fiber Reinforced Polymer back.

Choose the screenshot scope and pixel scale

page.screenshot() captures the viewport by default. Use fullPage: true for the full scrollable page, or locate an element and call its screenshot method for a component. Playwright’s scale option controls whether output is based on CSS pixels or device pixels; a higher pixel count can increase image dimensions and file size. See the Playwright Page API for the current options.

// Full page:
await page.screenshot({ path: 'full-page.png', fullPage: true });

// One element:
await page.locator('article').screenshot({ path: 'article.png' });

Wait for the right things, not just navigation

Navigation milestones

Playwright supports commit, domcontentloaded, load, and networkidle navigation milestones. load is a useful starting point for ordinary page assets, but a single-page app can render important content later. DOMContentLoaded happens earlier and is even less likely to reflect the final visual state. Wait for an application-specific element or ready signal after navigation.

Rank #2
Tracfone Motorola Moto G 2025, 64GB, Saphire Blue (Locked to | Prepaid Smartphone- 6.6" 120Hz Display, 5G , 50MP Quad Pixel Camera, Long-Lasting Battery
  • Carrier: This phone is locked to Tracfone, which means this device can only be used on the Tracfone wireless network. Tracfone plan required, activating is easy, just 3 steps.
  • DISPLAY: Immersive viewing on a 6.7-inch super-bright 120Hz display with powerful stereo speakers and Bass Boost for cinematic entertainment.
  • CAMERA SYSTEM: Advanced 50MP Quad Pixel camera captures sharp, detailed photos and videos in any lighting condition
  • PERFORMANCE: Lightning-fast 5G connectivity paired with a powerful processor and RAM Boost for smooth multitasking.
  • BATTERY LIFE: Long-lasting 5000mAh battery with TurboPower charging technology delivers hours of power in minutes.

Playwright defines networkidle as no network connections for at least 500 ms and discourages it as a general testing readiness condition. A quiet network does not establish that the right content appeared or that deferred images were requested. Use targeted assertions for the content in the screenshot rather than treating network activity as a universal ready signal. See Playwright’s Page API.

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

Fonts

Await document.fonts.ready in the page context when final typography matters. This is separate from waiting for navigation: it gives fonts used by the document a chance to finish loading before capture. It does not prove that an application will not subsequently insert new text or change styles, so perform the font check after the content you intend to capture is present.

Rank #3
Sale
Samsung Galaxy A17 5G Smart Phone 128GB, US 1 Yr Manufacturer Warranty Blue | Large AMOLED, High-Res Camera, Durable Design, Super Fast Charging, Expandable Storage, Circle to Search, 2025
  • YOUR CONTENT, SUPER SMOOTH: The ultra-clear 6.7" FHD+ Super AMOLED display of Galaxy A17 5G helps bring your content to life, whether you're scrolling through recipes or video chatting with loved ones.¹
  • LIVE FAST. CHARGE FASTER: Focus more on the moment and less on your battery percentage with Galaxy A17 5G. Super Fast Charging powers up your battery so you can get back to life sooner.²
  • MEMORIES MADE PICTURE PERFECT: Capture every angle in stunning clarity, from wide family photos to close-ups of friends, with the triple-lens camera on Galaxy A17 5G.
  • NEED MORE STORAGE? WE HAVE YOU COVERED: With an improved 2TB of expandable storage, Galaxy A17 5G makes it easy to keep cherished photos, videos and important files readily accessible whenever you need them.³
  • BUILT TO LAST: With an improved IP54 rating, Galaxy A17 5G is even more durable than before.⁴ It’s built to resist splashes and dust and comes with a stronger yet slimmer Gorilla Glass Victus front and Glass Fiber Reinforced Polymer back.

Images and lazy loading

The image check in the example waits for each current img element to complete, and attempts decode() for successfully loaded images where supported. If the page inserts images after that check, wait for the relevant application state and check again. Background images in CSS are not included in document.images; if they matter, use a page-specific readiness signal or inspect the relevant elements and styles.

For full-page captures, scrolling may be necessary before checking. Images marked for lazy loading can be deferred until they are in or near the viewport, so an image below the initial mobile screen may not have started loading. Scroll through the areas to be captured, allow loading to begin, then perform the image readiness check. The web.dev guidance on responsive images and lazy loading describes this near-viewport behavior.

Rank #4
Sale
Samsung Galaxy S26 Ultra, Unlocked Android Smartphone, 512GB, Black | Privacy Display, Galaxy AI, AI Camera, Super Fast Charging 3.0, Durable Battery, 2026, US 1 Year Warranty
  • PRIVACY DISPLAY: Automatically hide your screen from those beside you. The built-in privacy display can be preset¹ to turn on when receiving notifications, typing passwords, or using specific apps
  • TYPE IT IN. TRANSFORM IT FAST: Enhance any shot in seconds on your smartphone by using Photo Assist² with Galaxy AI.³ Add objects, restore details, or apply new styles by simply typing or tapping
  • NIGHTS, CAPTURED CLEARLY: From gigs to city lights, record and capture moments after dark with clarity using Nightography so your photos and videos stay crisp and clear on your Samsung Galaxy
  • MAKE IT. EDIT IT. SHARE IT: Turn everyday moments into something personal with creative tools built right into your mobile phone, whether it’s a special contact photo, custom wallpaper, an invitation or more⁴
  • HELP THAT KEEPS UP: Stay in the moment while Now Nudge with Galaxy AI helps you respond faster and stay organized with smart suggestions⁵ that appear exactly when you need them on your phone
// Trigger lazy-loaded content through the page before checking images.
await page.evaluate(async () => {
  const step = Math.max(1, Math.floor(window.innerHeight * 0.8));
  for (let y = 0; y < document.documentElement.scrollHeight; y += step) {
    window.scrollTo(0, y);
    await new Promise(resolve => setTimeout(resolve, 100));
  }
  window.scrollTo(0, 0);
});
// Run the font and image readiness check after this, then capture.

The short pause in this scrolling example is only an opportunity for lazy loading to start; it is not proof that every image loaded. Follow it with the image check, and use a site-specific signal if the page has more complex loading behavior.

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.

Do-it-yourself options and trade-offs

Decision Choose this When it matters
Automation library Playwright or Puppeteer Both provide programmatic page screenshots. Playwright’s cited documentation also covers mobile emulation and visual snapshot assertions. Puppeteer’s screenshot guide demonstrates navigation with networkidle2; that example is a workflow, not a guarantee that application content is ready.
Capture area Viewport, element, or full page Use viewport for the phone-screen view, an element for a component, and full page for below-the-fold content.
Mobile setup Device profile or explicit viewport A profile can set dimensions and other mobile traits; an explicit viewport gives direct control over CSS dimensions.
Readiness Navigation event plus targeted checks Wait for meaningful page content, fonts, and relevant images. Network activity alone is not a universal visual-ready signal.
Output scale CSS pixels or device pixels Pixel scale affects output dimensions and file size.
Repeatability Consistent browser and platform For visual comparisons, keep browser, OS, fonts, and related rendering conditions consistent.

Puppeteer’s screenshot API is another option; consult its screenshot guide. Neither library’s navigation milestone replaces checks for the actual content and assets your capture requires.

Best Value
Tracfone Moto g Play 2024 Prepaid Phone with a 1-Yr Plan Included | Prepaid Smartphone with Full YR Plan Included bundled with 1500 Min/Text/Data for365 days of service - Locked to Tracfone
  • Carrier: This phone is locked to Tracfone, which means this device can only be used on the Tracfone wireless network. Activating is easy, just 3 steps.
  • ACTIVATION Promotion: Includes 1500 min, 1500 texts & 1500 MB Data + add more as you need it
  • CAMERA SYSTEM: 50MP Quad Pixel camera. Capture sharper, more vibrant photos day or night with 4x the light sensitivity.
  • PERFORMANCE: Blazing-fast Qualcomm performance. Get the speed you need for great entertainment with a Snapdragon 680 processor and 4GB of RAM.
  • 64GB built-in storage. Get plenty of room for photos, movies, songs, and apps. Made for US
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Make captures reliable and useful

  • Wait on what the image must show. A visible page shell is not enough if the screenshot depends on a chart, product image, or client-rendered section. Wait for that specific element or application signal.
  • Bound every wait. Use finite navigation and locator timeouts, and ensure custom asset waits also have a timeout in production. Decide whether a missing asset should fail the job, be logged, or be acceptable for your use case.
  • Match the intended mobile conditions. Choose a device profile or explicit CSS viewport deliberately; mobile viewport behavior can depend on the viewport meta tag and emulation settings.
  • Keep visual test conditions stable. Browser and platform rendering, installed fonts, and host environment can change pixels. Playwright notes that browser rendering can vary between browsers and platforms. Its visual comparison assertions wait for two consecutive screenshots to match before comparing; see Playwright’s visual comparisons documentation.
  • Budget for full-page work. Full-page captures can require scrolling and waiting for more assets than a viewport capture. Higher device-pixel output can also create larger files. Select only the scope and scale the task needs.

Troubleshoot missing or inconsistent content

Fonts still look wrong

  • Confirm the content and styles are present before awaiting document.fonts.ready.
  • Check whether the requested font loaded successfully; font readiness does not make an unavailable font available.
  • Keep the browser and operating-system environment consistent if the screenshot is a visual-test baseline.

Images are missing from a full-page screenshot

  • Scroll the capture regions into or near view to trigger lazy loading, then check image completion.
  • Distinguish a completed failure from a successful load with naturalWidth; decide whether failed assets should invalidate the capture.
  • If the visual is a CSS background or an image inserted later by the app, add a page-specific check instead of relying only on document.images.

The screenshot is blank or shows a loading shell

  • Wait for the specific application content, not just load or DOMContentLoaded.
  • Check that the selected locator exists and becomes visible at the emulated viewport size.
  • Use bounded waits and surface timeout details so a genuinely failed page is distinguishable from a slow one.

Repeated screenshots differ

  • Pin the browser and operating-system environment and use the same fonts and viewport settings.
  • Wait for changing content or animations to settle with a page-specific condition; a quiet network alone does not ensure pixel stability.
  • Use Playwright’s screenshot comparison workflow when the goal is visual regression testing rather than a one-off image.

Or skip the browser setup

ScreenshotNeo is a website screenshot API and MCP server. Its one-call endpoint can return an image or PDF without you managing a browser session:

curl -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 request options. Before capture, it can accept cookie or consent banners and remove more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers identify the page verdict and billing status. Its MCP server offers take_screenshot, get_page_info, and capture_pdf tools for AI agents. The Free plan includes 1,000 shots a month with no card; paid plans start at $5 for 3,000 shots.

Sign up for ScreenshotNeo free: 1,000 screenshots a month, no card required.

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

Frequently Asked Questions

Can waiting for images reveal a broken image?

Yes. Check naturalWidth after completion; a value of zero indicates the image did not load successfully.

Can I capture only one mobile component instead of the whole page?

Yes. Use a locator for the component and call its screenshot method after its content and assets are ready.

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

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

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.