Appearance
Usage
Minimal example: Python scrape
The simplest Steel operation is a one-call scrape. No session management needed -- Steel handles the browser lifecycle internally.
python
import os
from steel import Steel
client = Steel(steel_api_key=os.environ["STEEL_API_KEY"])
result = client.scrape(url="https://example.com")
print(result.content.html)Minimal example: Node.js session with Puppeteer
For multi-step flows you create a session, connect a browser driver, do your work, then release the session.
js
import Steel from 'steel-sdk';
import puppeteer from 'puppeteer-core';
const client = new Steel({ steelAPIKey: process.env.STEEL_API_KEY });
// Create a cloud browser session
const session = await client.sessions.create();
// Connect Puppeteer to the remote session
const browser = await puppeteer.connect({
browserWSEndpoint: `wss://connect.steel.dev?apiKey=${process.env.STEEL_API_KEY}&sessionId=${session.id}`,
});
const [page] = await browser.pages();
await page.goto('https://example.com');
const title = await page.title();
console.log('Page title:', title);
// Always release the session when done
await browser.close();
await client.sessions.release(session.id);Minimal example: Node.js session with Playwright
js
import Steel from 'steel-sdk';
import { chromium } from 'playwright-core';
const client = new Steel({ steelAPIKey: process.env.STEEL_API_KEY });
const session = await client.sessions.create();
const browser = await chromium.connectOverCDP(
`wss://connect.steel.dev?apiKey=${process.env.STEEL_API_KEY}&sessionId=${session.id}`
);
const page = await browser.newPage();
await page.goto('https://example.com');
console.log('Title:', await page.title());
await browser.close();
await client.sessions.release(session.id);Key rules
- Always release sessions. Use try/finally to guarantee cleanup even on errors.
- Node SDK key name is
steelAPIKey; Python SDK key name issteel_api_key. They differ. - Never construct WebSocket URLs manually -- use
wss://connect.steel.dev?apiKey=...&sessionId=...exactly as shown above. - Sessions support up to 24-hour duration. Set a shorter
timeoutonsessions.create()if your task is bounded.
CAPTCHA handling
Steel includes built-in CAPTCHA solving. Pass solveCaptcha: true (Node) or solve_captcha=True (Python) to sessions.create() to enable it.