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

Use Puppeteer’s named iPhone profile, apply it before opening the page, wait for the visual state you need, and save a screenshot with page.screenshot(). This captures a Chromium page configured to approximate that profile; it does not prove how the site renders in Safari on a physical iPhone.

Capture a page using a named iPhone profile

Install Puppeteer in a Node.js project, then create a script such as screenshot.mjs. This example uses the documented iPhone 17 Pro profile and saves a viewport screenshot as a PNG:

import puppeteer, {KnownDevices} from 'puppeteer';

const browser = await puppeteer.launch();
try {
  const page = await browser.newPage();
  await page.emulate(KnownDevices['iPhone 17 Pro']);
  await page.goto('https://example.com', {waitUntil: 'networkidle2'});
  await page.screenshot({path: 'screenshot.png'});
} finally {
  await browser.close();
}
  1. Install Puppeteer using your project’s package manager if it is not already a dependency.
  2. Import puppeteer and KnownDevices.
  3. Launch the browser and create a page.
  4. Call page.emulate() with the chosen profile before navigation.
  5. Navigate to the target URL, wait for the state you intend to capture, and call page.screenshot().
  6. Close the browser in a finally block so it also closes if navigation or capture fails.

The Puppeteer API describes emulate() as a shortcut for setting the user agent and viewport. Its documentation cautions that many sites are not designed to change size after loading, so configure emulation before goto(). See the Page.emulate() API and Puppeteer screenshots guide.

Choose the iPhone profile or set a custom viewport

The KnownDevices reference lists named iPhone profiles, including iPhone 15, iPhone 16, and iPhone 17 family variants. Examples include iPhone 17 Pro, iPhone 17 Pro Max, iPhone 16e, and iPhone 15. Use the profile that matches the browser configuration you want to approximate; a profile is not a guarantee of exact rendering on a current physical phone.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Apple iPhone 14, 128GB, Midnight - Unlocked (Renewed)
  • This phone is unlocked and compatible with any carrier of choice on GSM and CDMA networks (e.g. AT&T, T-Mobile, Sprint, Verizon, US Cellular, Cricket, Metro, Tracfone, Mint Mobile, etc.).
  • Please check with your carrier to verify compatibility.
  • The device does not come with headphones or a SIM card. It does include a generic (Mfi certified) charging cable.
  • Tested for battery health and guaranteed to have a minimum battery capacity of 80%.

If you need specific dimensions rather than a named profile, use page.setViewport() before navigation:

await page.setViewport({width: 390, height: 844});
await page.goto('https://example.com');

Those dimensions are an example of a custom viewport, not a claim that they match a particular iPhone. The Page.setViewport() API documents the viewport settings. Changing isMobile or hasTouch can trigger a page reload in some cases; configure the desired settings before loading the page.

Rank #2
Apple iPhone 16, 128GB, Pink - Unlocked (Renewed)
  • 6.1" Super Retina XDR OLED, HDR10, Dolby Vision, 1000nits (typ), 2000nits (HBM), 2556x1179px at 460ppi, 3561mAh Battery
  • 128GB 8GB RAM, Apple A18 (3nm), Hexa-core (2x4.04 GHz + 4x2.20 GHz), Apple GPU 5-core, 16‑core Neural Engine
  • Rear camera: 48MP, f/1.6, wide + 12MP, f/2.2, ultrawide, Front Camera: 12MP, f/1.9, wide, iOS 18, upgradable to iOS 18.5
  • 4G LTE: 1/2/3/4/5/7/8/12/13/14/17/18/19/20/25/26/28/29/30/32/34/38/39/40/41/42/48/53/66/71, 5G: n1/2/3/5/7/8/12/14/20/25/26/28/29/30/38/40/41/48/53/66/70/71/75/76/77/78/79 - Dual eSIM
  • Unlocked for freedom to choose your carrier. Compatible with both GSM & CDMA networks. The phone is unlocked to work with all GSM Carriers & CDMA Carriers Including AT&T, T-Mobile, Verizon, Sprint., Etc.

Wait for the state you actually want to capture

The example uses waitUntil: 'networkidle2', as in Puppeteer’s screenshot guide, but network idleness is not a universal signal that a page looks finished. Long polling, animations, deferred content, or application-specific loading can make a different wait strategy necessary.

  • For a known page element, wait for a selector that appears when the relevant content is ready.
  • For an application with a reliable completion signal, wait for that signal before capturing.
  • If a short, predictable delay is genuinely appropriate, use a delay—but prefer a meaningful page condition when possible.

Navigation completing does not necessarily mean images, client-rendered content, or transitions have reached the state you need. Choose the wait condition for the target site and test that the saved image contains the intended content.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Apple iPhone 15, 128GB, Black - Unlocked (Renewed)
  • 6.1inch Super Retina XDR display. Aluminum with color-infused glass back. Ring/Silent switch
  • Dynamic Island. A magical way to interact with iPhone. A16 Bionic chip with 5-core GPU
  • Advanced dual-camera system. 48MP Main | Ultra Wide. Super-high-resolution photos (24MP and 48MP). Next-generation portraits with Focus and Depth Control. 4X optical zoom range
  • Emergency SOS via satellite. Crash Detection. Roadside Assistance via satellite
  • Up to 26 hours video playback. USB C, Supports USB 2. Face ID

Viewport, full-page, and element screenshots

page.screenshot({path: 'screenshot.png'}) captures the current viewport by default. It does not automatically capture the entire document. Puppeteer’s screenshots guide also documents full-page capture and taking a screenshot of a specific element:

// Capture the full page rather than only the viewport
await page.screenshot({path: 'full-page.png', fullPage: true});

// Capture a particular element
const element = await page.$('.target');
if (!element) throw new Error('Target element was not found');
await element.screenshot({path: 'element.png'});

Use a viewport screenshot to inspect the visible iPhone-sized layout, a full-page screenshot to capture content below the fold, or an element screenshot to isolate a component. Element screenshots can scroll a hidden element into view before capture.

Rank #4
Apple iPhone 13, 128GB, Midnight - Unlocked (Renewed)
  • This pre-owned product is not Apple certified, but has been professionally inspected, tested and cleaned by Amazon-qualified suppliers.
  • There will be no visible cosmetic imperfections when held at an arm’s length.
  • This product is eligible for a replacement or refund within 90 days of receipt if you are not satisfied.
  • Product may come in generic Box.

What Puppeteer emulation can and cannot tell you

Emulation is useful for checking responsive layout under a selected browser viewport, device metrics, and user agent. It is not equivalent to running the page in iOS Safari on physical hardware. Differences in browser behavior or device-specific conditions can matter when validating a mobile experience.

If your goal is wider visual coverage, distinguish tests across chosen responsive widths from tests on particular mobile browsers and devices. BrowserStack Percy documents mobile-browser visual testing using real mobile devices, with screenshots defaulting to portrait orientation; access requires its Desktop & Mobile plan or a trial request. Its responsive-testing documentation says each configured width counts as a separate screenshot against monthly usage. Check Percy mobile visual testing and responsive visual testing for current coverage and access terms.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
Apple iPhone 16e, 128GB, Black - Unlocked (Renewed)
  • 6.1" Super Retina XDR OLED, HDR10, 800 nits (HBM), 1200 nits (peak), 2532x1170px at 460ppi, 4005mAh Battery
  • 8GB RAM, Apple A18 6-core CPU (2 performance + 4 efficiency cores), Apple GPU 4-core, 16‑core Neural Engine
  • Rear camera: 48MP, f/1.6, wide, Front Camera: 12MP, f/1.9, wide, iOS 18.3.1, upgradable to iOS 18.5
  • Connectivity: Global 4G LTE, Sub-6 GHz 5G, LTE, Wi-Fi 6, Bluetooth 5.3, NFC, USB-C, Wireless Charging (7.5W). (does not have mmWave 5G or MagSafe or physical SIM card) - Dual eSIM Only
  • Unlocked for freedom to choose your carrier. Compatible with both GSM & CDMA networks. The phone is unlocked to work with all GSM Carriers & CDMA Carriers Including AT&T, T-Mobile, Verizon, Straight Talk., Etc.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshooting Puppeteer iPhone screenshots

  • The layout looks like desktop: confirm that page.emulate(KnownDevices[...]) ran before navigation and that the profile name is present in the current KnownDevices reference.
  • The screenshot is blank or incomplete: navigation may have finished before client-rendered content or images were ready. Wait for the relevant selector or application signal before capture.
  • The saved image shows only the first screen: the default screenshot is viewport-sized. Set fullPage: true when you need the full document.
  • The capture fails because an element is missing: check the selector and wait for the element before querying it; do not call screenshot() on a missing handle.
  • The result differs from an iPhone: Puppeteer is emulating browser settings, not running iOS Safari on real hardware. Validate on a physical device or a real-device testing service if that distinction matters.
  • The page never becomes idle: pages with persistent connections may not reach a network-idle condition. Wait for the specific content or readiness signal needed instead of treating network idleness as mandatory.

Or skip the browser setup

ScreenshotNeo offers a one-request screenshot API; see the ScreenshotNeo API documentation.

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

ScreenshotNeo accepts cookie and consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be turned off. Bot checks and 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 provides take_screenshot, get_page_info, and capture_pdf tools for AI agents. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000. See ScreenshotNeo for the service and its docs for request options.

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

Frequently Asked Questions

Does an iPhone profile make Puppeteer run iOS Safari?

No. It configures Chromium’s viewport, device metrics, and user agent; it does not run iOS Safari.

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

Can I capture an element that is not currently visible?

Yes. Puppeteer’s element screenshot method can scroll the element into view before capturing it.

Quick Recap

Bestseller No. 1
Apple iPhone 14, 128GB, Midnight - Unlocked (Renewed)
Apple iPhone 14, 128GB, Midnight - Unlocked (Renewed)
Please check with your carrier to verify compatibility.; Tested for battery health and guaranteed to have a minimum battery capacity of 80%.
$300.00
Bestseller No. 3
Apple iPhone 15, 128GB, Black - Unlocked (Renewed)
Apple iPhone 15, 128GB, Black - Unlocked (Renewed)
Dynamic Island. A magical way to interact with iPhone. A16 Bionic chip with 5-core GPU; Emergency SOS via satellite. Crash Detection. Roadside Assistance via satellite
$409.00
Bestseller No. 4
Apple iPhone 13, 128GB, Midnight - Unlocked (Renewed)
Apple iPhone 13, 128GB, Midnight - Unlocked (Renewed)
There will be no visible cosmetic imperfections when held at an arm’s length.; Product may come in generic Box.
$262.00

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.