Overview
Stagehand v3 can work alongside Selenium WebDriver, allowing both tools to operate on the same browser session simultaneously. This enables you to combine Stagehand’s AI-powered automation with Selenium’s precise element interactions.
Browserbase Only: This integration requires Browserbase. It does not work with env: "LOCAL" because Selenium needs a remote WebDriver endpoint.
Installation
Install Stagehand, Selenium, and the Browserbase SDK:
npm install @browserbasehq/stagehand selenium-webdriver @browserbasehq/sdk
Quickstart
Create Shared Session
Use the Browserbase SDK to create a session that both tools can connect to:
import http from "http";
import { Builder, Key } from "selenium-webdriver";
import Browserbase from "@browserbasehq/sdk";
import { Stagehand } from "@browserbasehq/stagehand";
const bb = new Browserbase({
apiKey: process.env.BROWSERBASE_API_KEY,
});
// Create shared session
const session = await bb.sessions.create({
projectId: process.env.BROWSERBASE_PROJECT_ID,
});
console.log("Session created:", session.id);
Connect Stagehand
Initialize Stagehand with the session ID:
const stagehand = new Stagehand({
env: "BROWSERBASE",
browserbaseSessionID: session.id,
model: "openai/gpt-5",
verbose: 2,
});
await stagehand.init();
Connect Selenium
Use a custom HTTP agent with the session’s signing key:
// Create custom HTTP agent with signing key
const customHttpAgent = new http.Agent({});
(customHttpAgent as any).addRequest = (req: any, options: any) => {
req.setHeader("x-bb-signing-key", session.signingKey);
(http.Agent.prototype as any).addRequest.call(customHttpAgent, req, options);
};
// Connect Selenium WebDriver
const driver = new Builder()
.forBrowser("chrome")
.usingHttpAgent(customHttpAgent)
.usingServer(session.seleniumRemoteUrl)
.build();
Now both Stagehand and Selenium operate on the same browser:
// Navigate with Stagehand
const page = stagehand.context.pages()[0];
await page.goto("https://www.google.com");
// Extract page content with Stagehand AI
const pageContent = await stagehand.extract();
console.log("Page content:", pageContent);
// Use Selenium for precise element interaction
const searchBox = await driver.findElement({ name: "q" });
await searchBox.sendKeys("Browserbase automation");
await searchBox.sendKeys(Key.RETURN);
// Wait for results
await driver.sleep(2000);
console.log("Search completed!");
Key Points
- Shared Session: Both tools connect to the same Browserbase session
- Signing Key: Selenium requires the session’s
signingKey in HTTP headers
- Remote URL: Use
session.seleniumRemoteUrl for Selenium’s server endpoint
- Concurrent Usage: Both tools can operate on the browser simultaneously
- Cleanup: Close both Stagehand (
await stagehand.close()) and Selenium (await driver.quit())
Next Steps