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

Puppeteer’s WaitForOptions controls navigation waits: timeout sets the maximum duration, signal can cancel a wait, and waitUntil selects the lifecycle event or events that count as completion. For elements, use waitForSelector; for application-specific readiness, use waitForFunction. Choose the condition your next step actually needs instead of adding an arbitrary delay.

What Puppeteer’s WaitForOptions control

The current Puppeteer API reference (version 25.12.0) defines three optional properties for WaitForOptions. They are used with navigation-style waits; they are not the options for selector visibility.

Option What it controls Default or behavior
timeout Maximum time to wait, in milliseconds 30,000 ms by default; 0 disables the timeout. The default can be changed with Page.setDefaultTimeout() or Page.setDefaultNavigationTimeout().
signal Cancellation through an AbortSignal Optional. Aborting the signal cancels the wait.
waitUntil Lifecycle event or events that complete a navigation wait load by default. If you supply an array, every listed event must fire.

Set waitUntil according to what the code after the wait needs. It is not a selector visibility setting, and no single lifecycle event is the right choice for every site or workflow.

Choose the wait that matches readiness

What must be true Use What it establishes
An element exists in the DOM page.waitForSelector(selector) Resolves when a match exists, including immediately if it already exists.
An element exists and is visible by Puppeteer’s documented definition page.waitForSelector(selector, { visible: true }) Waits for a match that is not hidden by display:none or visibility:hidden.
An element is absent or hidden page.waitForSelector(selector, { hidden: true }) Absence counts as success, as do the documented hidden CSS states; the result can be null.
A custom application condition is true page.waitForFunction(fn, options, ...args) Waits until the supplied page-context function returns a truthy value.
An action triggers navigation page.waitForNavigation(options) paired with the action Waits for the navigation according to the chosen lifecycle condition.

Visibility here does not mean that the element is within the viewport, unobscured, or ready for interaction. Define a stronger application-specific condition if your next action depends on one of those properties.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Elebase USB to USB C Adapter for iPhone 18 Pro Max,USBC Car Charger Adapter
  • Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
  • Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
  • Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
  • Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
  • 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.

Wait for an element with waitForSelector

Page.waitForSelector() is the direct choice when DOM presence or the documented visible/hidden state is the condition you need. Its options are a separate interface from WaitForOptions.

Selector option Meaning Default or detail
visible Require a matching element to be present and visible false. “Visible” means not display:none or visibility:hidden.
hidden Wait for a matching element to be absent or hidden false. Absence is sufficient; the result may be null.
timeout Maximum wait in milliseconds 30,000 ms by default; 0 disables the timeout. The page-level default is configurable.
signal Cancel the wait with an AbortSignal Optional.

For an ordinary appearance wait, Puppeteer throws if the selector does not appear before the timeout. Use hidden: true when success means the element is gone or hidden—not when you specifically require proof that it was once visible and then disappeared.

Rank #2
Anker USB-C Hub, 5-in-1 USB Hub for Laptops, 4K HDMI Multiport Adapter
  • 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
  • 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
  • Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
  • 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
  • What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.

Example: wait until a result is visible

await page.waitForSelector('.search-results', {
  visible: true,
  timeout: 10_000,
});

This waits for the selector’s documented visibility condition for up to 10 seconds. It does not establish that results have finished loading internally; if that matters, wait for a result-specific predicate as well.

Wait for an application condition with waitForFunction

Use Page.waitForFunction() when readiness is neither a selector state nor a navigation lifecycle event—for example, when an application exposes a state value or a result count. The function runs in the page context until it returns a truthy value. A successful wait proves only that your supplied predicate became truthy.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Sale
Anker USB C Hub, 7in1 Multi-Port USB Adapter, 4K@60Hz USBC to HDMI Splitter
  • Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
  • Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
  • Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
  • Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
  • What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
await page.waitForFunction(() => {
  const status = document.querySelector('[data-status]');
  return status?.getAttribute('data-status') === 'complete';
}, { timeout: 15_000 });

Function-wait options include polling, timeout, and signal. Polling can use 'raf' (the documented default), 'mutation', or a numeric interval in milliseconds. Use 'raf' for a condition that follows rendering, 'mutation' when DOM changes are the relevant trigger, or a number when you need a timed polling interval. Keep the predicate focused and avoid expensive work on every poll.

Wait for navigation without a race

When a click may navigate, create the navigation wait before triggering the click. Puppeteer documents pairing both promises with Promise.all so the navigation cannot begin before the wait is registered.

Rank #4
Sale
UGREEN USB to USB C Adapter Combo 4-Pack, 10Gbps USB C Converter Space Gray
  • Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
  • Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
  • Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
  • Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
  • Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
const [response] = await Promise.all([
  page.waitForNavigation({ waitUntil: 'domcontentloaded' }),
  page.click('a.next'),
]);

Here, domcontentloaded is an example, not a universal recommendation. Select the lifecycle point required by the code that follows. The Page API documents the paired-wait approach.

Configure cancellation and timeout defaults

Navigation waits, selector waits, and function waits support an optional AbortSignal in their respective options. This can help stop work when a surrounding task is cancelled. For example:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
Anker USB C Hub, 5-in-1 USBC to HDMI Splitter with 4K Display
  • 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
  • Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
  • Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
  • HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
  • What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
const controller = new AbortController();

const wait = page.waitForSelector('.result', {
  timeout: 10_000,
  signal: controller.signal,
});

// If the surrounding task is cancelled:
controller.abort();

await wait;

Calling abort() cancels the wait; handle that cancellation in the surrounding control flow if it is an expected outcome. A timeout is different: it limits how long the wait can continue before failing. Selector waits default to 30 seconds and can use 0 to disable that limit. Set a page-wide default with Page.setDefaultTimeout(); navigation defaults can also be adjusted with Page.setDefaultNavigationTimeout(). The documented default for WaitForOptions.timeout is also 30 seconds.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Account for frame and element-handle lifetimes

There is a lifecycle distinction between waiting from a frame and waiting through an existing element handle. Frame.waitForSelector() works across navigations. By contrast, ElementHandle.waitForSelector() is tied to its current element and does not work across navigations or after that element is detached. Use a frame-level wait when the page may navigate or replace the relevant element.

Troubleshoot waits that time out or finish too early

  • Selector wait times out: Check that the selector matches the actual DOM in the relevant frame, and confirm the page has reached the state where that element can appear. If you need visibility rather than presence, set visible: true; do not assume a default selector wait checks visibility.
  • A visibility wait resolves but the element is not usable: Puppeteer’s documented visibility test excludes display:none and visibility:hidden; it does not promise that the element is on screen, unobscured, or otherwise actionable. Wait for the additional condition your workflow requires.
  • A hidden wait resolves immediately: This is expected when no matching element exists. hidden: true accepts absence as success.
  • Navigation happens but the wait is missed: Register waitForNavigation() before the click or other action that triggers it, using the Promise.all pattern above.
  • Navigation wait completes before app data is ready: A lifecycle event only establishes that the selected event or events fired. Add a selector or function wait for the specific application state needed next.
  • An element-handle wait fails after navigation or detachment: The handle is tied to its current element. Use a frame-level selector wait when the target may be replaced or navigation may occur.
  • A wait runs longer than intended: Set a call-specific timeout or configure the page default. Use 0 only when an unlimited wait is deliberate, and consider cancellation when the surrounding operation can be abandoned.

Or skip the browser setup

If your task is to capture a page rather than automate its next interaction, ScreenshotNeo provides a screenshot API and MCP server. One GET request returns a screenshot or PDF; its capture process accepts cookie/consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets before the shot. These cleanup steps can each be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and responses identify the page verdict and billing status in headers. Its MCP server offers take_screenshot, get_page_info, and capture_pdf for AI agents and MCP clients.

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

See the ScreenshotNeo API documentation for request options. The Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Sign up for ScreenshotNeo free.

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

Frequently Asked Questions

What are Puppeteer WaitFor options?

For navigation-style waits, the options are timeout, signal, and waitUntil. Selector and function waits have their own related options.

What is the default Puppeteer timeout?

The documented default for these waits is 30,000 milliseconds. You can change page-level defaults, set a per-call timeout, or use 0 to disable the timeout where documented.

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.