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 →Use Puppeteer’s KnownDevices preset and call page.emulate() before opening the page. This applies the selected device’s viewport, user agent, and related metrics; then page.screenshot() saves a viewport or full-page capture.
Emulate an iPhone and capture a page
Install Puppeteer in a Node.js project, then use a device preset. The current Puppeteer device reference includes iPhone 17 Pro; choose the preset that matches the target you need rather than assuming every iPhone uses the same settings.
| # | Preview | Product | Price | |
|---|---|---|---|---|
| 1 |
|
Apple iPhone 14, 128GB, Midnight - Unlocked (Renewed) | $300.00 | Buy on Amazon |
| 2 |
|
Apple iPhone 16, 128GB, Pink - Unlocked (Renewed) | $587.99 | Buy on Amazon |
| 3 |
|
Apple iPhone 15, 128GB, Black - Unlocked (Renewed) | $408.99 | Buy on Amazon |
| 4 |
|
Apple iPhone 13, 128GB, Midnight - Unlocked (Renewed) | Unlocked | $265.00 | Buy on Amazon |
| 5 |
|
Apple iPhone 16e, 128GB, Black - Unlocked (Renewed) | $387.73 | Buy on Amazon |
As an Amazon Associate I earn from qualifying purchases.
import puppeteer, { KnownDevices } from 'puppeteer';
const browser = await puppeteer.launch();
try {
const page = await browser.newPage();
const iPhone = KnownDevices['iPhone 17 Pro'];
await page.emulate(iPhone);
await page.goto('https://example.com', { waitUntil: 'networkidle2' });
await page.screenshot({ path: 'iphone.png', fullPage: true });
} finally {
await browser.close();
}
Run this as an ES module in a Node.js environment with Puppeteer installed. The preset is accessed by its name in Puppeteer’s KnownDevices reference. Preset dimensions can vary with the Puppeteer version; check the entry for the version in your project instead of relying on a dimension copied from elsewhere.
Apply emulation before navigation
page.emulate(device) is a shortcut for setting the user agent and viewport. Puppeteer recommends applying it before navigation: changing the viewport after a page has loaded can trigger a resize that some sites do not handle as expected. See the Page.emulate() documentation.
#1 Best Overall
- 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%.
- Create a page with
browser.newPage(). - Select a device from
KnownDevices, or define a device configuration appropriate to your target. - Call
await page.emulate(device)beforepage.goto(). - Navigate to the target URL and wait for the page state your capture requires.
- Call
page.screenshot()with the desired output options.
Choose the screenshot area and readiness condition
Viewport or full page
By default, page.screenshot() captures the current viewport. Set fullPage: true to capture the full page, or use clip in the screenshot options when you need a specific rectangle. Set path to write a file; without it, Puppeteer returns the image data. The Puppeteer screenshots guide and ScreenshotOptions reference document these options, including image type, applicable quality settings, and transparent-background capture with omitBackground.
Wait for the right content
The example uses waitUntil: 'networkidle2', which Puppeteer demonstrates in its screenshots guide. It is not a guarantee that every application has finished rendering: pages may load content after network activity settles. For a known element, wait for it explicitly before capture, for example:
await page.goto('https://example.com', { waitUntil: 'domcontentloaded' });
await page.waitForSelector('.page-ready');
await page.screenshot({ path: 'iphone.png', fullPage: true });
Replace .page-ready with a selector that appears when the content you need is available. If the page has no reliable readiness marker, choose a navigation condition or wait strategy suited to that site and verify the resulting capture.
Recommended Free Tools
Rank #2
- 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.
Choose the right iPhone settings
Use a named preset when your goal is to reproduce a particular Puppeteer-supported device configuration. For a custom setup, compare the properties that affect the screenshot rather than treating “iPhone” as one universal size:
- Target model: select the closest available preset for the device you are checking.
- Viewport: width and height determine the page’s responsive layout.
- Device pixel ratio: affects the relationship between CSS pixels and output pixels.
- User agent: some sites serve different markup or behavior based on it.
- Touch and mobile behavior: these are separate emulation considerations, not just changes to the viewport.
- Orientation and capture area: decide whether you need portrait or landscape and a viewport or full-page image.
Puppeteer’s Device type includes a user-agent string and viewport. Chrome DevTools describes viewport, device pixel ratio, and touch simulation as distinct mobile-emulation dimensions. Its device mode is an approximation running on desktop, not a physical phone: Chrome DevTools: Simulate mobile devices with device mode.
Understand what the screenshot does—and does not—prove
Puppeteer applies device settings through Chromium’s browser automation APIs. The screenshot is useful for checking responsive layout under those emulated settings, but it does not by itself establish that a page behaves identically in iOS Safari or on iPhone hardware. If device-specific behavior matters, validate it on an actual iPhone as well.
Rank #3
- 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
Troubleshooting common capture problems
The page looks like desktop
Confirm that page.emulate(device) runs on the same page before page.goto(). Check the selected KnownDevices entry and whether the site relies on a user agent, viewport, or touch behavior that your chosen configuration does not reproduce.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problemsThe screenshot is blank or missing content
The capture may have happened before the relevant content rendered. Replace a generic readiness assumption with a wait for a page-specific selector, or choose a different navigation condition. A network-idle condition does not ensure that every delayed or client-rendered element is ready.
The layout changes unexpectedly
Apply emulation before navigation, then inspect the chosen preset’s viewport and device settings for your installed Puppeteer version. A page resize after load can affect sites that are not designed to handle a phone-size change mid-session.
Rank #4
- 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.
The image is cropped or too long
For a viewport-only image, leave fullPage unset or set it to false. For the whole document, set fullPage: true. Use clip when the required output is a defined rectangle.
Or skip the browser setup
ScreenshotNeo takes a screenshot or PDF with one GET request. Cookie and consent banners are accepted before capture, and more than 60 known consent platforms, newsletter popups, and chat widgets can be removed; each of these steps 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 provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.
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 documentation for API setup and options. ScreenshotNeo offers 1,000 screenshots per month free with no card; paid plans start at $5 for 3,000. Sign up for free ScreenshotNeo access.
Runnable alternatives in Python and Node.js
These examples make the same one-request capture as the cURL command, saving the response body as an image. Replace YOUR_API_KEY with your key.
Best Value
- 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.
Python
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://example.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
Node.js
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://example.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
For API options beyond the basic request, use the ScreenshotNeo documentation.
Frequently Asked Questions
Does Puppeteer’s iPhone preset require a connected phone?
No. The preset configures Puppeteer’s browser session; it does not connect to or control a physical iPhone.
Can I save the screenshot as a buffer instead of a file?
Yes. Call page.screenshot() without a path; Puppeteer returns the image data.
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.




