Many modern web applications open new tabs when users click certain buttons or links. Without proper multitab support, automation scripts break when expected content appears in a new tab rather than the current one. Stagehand’s multitab capabilities ensure your automations work seamlessly across multitab workflows.

The Stagehand Page

Stagehand automatically adapts to multitab workflows. The stagehand.page object always points to the most recently opened or active tab, ensuring your automations continue working even when new tabs are created. This means you can continue using familiar patterns:
const page = stagehand.page;
await page.goto("https://example.com");
await page.act("click the button that opens a new tab");
// page now automatically points to the new tab
await page.extract("get data from new tab");
Important: Stagehand Agent will always operate on the stagehand.page. If you need an agent to work across specific tabs, you’ll need to manage page switching manually.

Manual Page Management

For more control or multitab workflows, you can manage multiple tabs explicitly:
// Create a second page
await stagehand.context.newPage();
const pages = stagehand.context.pages();

const githubPage = pages[0];
const pythonPage = pages[1];

// Navigate each page to different repositories
await githubPage.goto("https://github.com/browserbase/stagehand");
await pythonPage.goto("https://github.com/browserbase/stagehand-python");

// Extract data from both pages simultaneously
const [stagehandStars, stagehandPythonStars] = await Promise.all([
  githubPage.extract("extract the repository stars"),
  pythonPage.extract("extract the repository stars")
]);

console.log(`Stagehand stars: ${stagehandStars}`);
console.log(`Stagehand-Python stars: ${stagehandPythonStars}`);

Handling Tab Events

You can also listen for tab events to control what happens when new tabs are opened:
const page = stagehand.page;
await page.goto("https://browserbase.github.io/stagehand-eval-sites/sites/five-tab/");

// close the new tab after it's opened
page.on("popup", async () => {
  const newPage = stagehand.context.pages()[1];
  await newPage.close();
});

await page.act("click the button to open the other page");

const page_number = await page.extract("extract the page number");
console.log(`You're on page ${page_number}`);

Next Steps