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.
Recommended Free Tools
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
- 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
- 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.
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →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
- 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
- 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.
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
- 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
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
loadorDOMContentLoaded. - 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.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →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.
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.




