Skip to content

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 is steel_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 timeout on sessions.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.