What is an iframe?

Iframes embed other pages within your current page. Sites use them for consent banners, payment widgets, chat bubbles, and third-party content. Elements inside iframes exist in a separate context than the main page.

Enable iframe support

Set iframes: true in your act(), observe(), and extract() commands.
// Act within iframes
await page.act({ action: "click the accept cookies button", iframes: true });

// Observe within iframes
const results = await page.observe({
  instruction: "Find the primary action button",
  iframes: true,
});

// Extract from iframes
const data = await page.extract({
  instruction: "Extract the product price from the payment widget",
  schema: z.object({
    price: z.string(),
  }),
  iframes: true,
});

Tips

  • Iframes can increase processing time. For best performance, use the iframe option only when necessary.
  • When you are unsure whether an element will be in an iframe, you can verify the presence of iframes in Stagehand logs.
  • If an element intermittently fails to be found, it may be inside a lazy‑loaded iframe. Add small waits between steps or re‑run your action.
You can enable experimental features (like Shadow DOM support) via your Stagehand configuration. See the configuration guide.

Next steps