Skip to content

Playwright Python Guide

Fresh

Connect Playwright for Python to Steel for managed browser sessions.

Method 1: One-Line Change

Replace your local browser launch:

python
# Before - local browser
browser = chromium.launch()

# After - Steel managed browser
browser = chromium.connect_over_cdp(
    'wss://connect.steel.dev?apiKey=MY_STEEL_API_KEY'
)

Method 2: Create and Connect

Use for proxy, CAPTCHA solving, and other advanced features:

python
import os
from playwright.sync_api import sync_playwright
from steel import Steel

client = Steel(steel_api_key=os.getenv('STEEL_API_KEY'))

def main():
    # Create session with features
    session = client.sessions.create(
        use_proxy=True,
        solve_captcha=True
    )

    # Connect Playwright
    playwright = sync_playwright().start()
    browser = playwright.chromium.connect_over_cdp(
        f'wss://connect.steel.dev?apiKey={os.getenv("STEEL_API_KEY")}&sessionId={session.id}'
    )

    # Use existing context for session recording
    context = browser.contexts[0]
    page = context.new_page()
    page.goto('https://example.com')
    print(page.title())

    # Cleanup
    browser.close()
    client.sessions.release(session.id)
    playwright.stop()

main()

Use Existing Context

Always use browser.contexts[0] instead of creating a new context. This ensures:

  • Session is properly recorded in the live viewer
  • Page events are captured for replay
  • Browser fingerprint settings are applied correctly

Async Version

python
import asyncio
import os
from playwright.async_api import async_playwright
from steel import Steel

client = Steel(steel_api_key=os.getenv('STEEL_API_KEY'))

async def main():
    session = client.sessions.create(use_proxy=True)

    async with async_playwright() as playwright:
        browser = await playwright.chromium.connect_over_cdp(
            f'wss://connect.steel.dev?apiKey={os.getenv("STEEL_API_KEY")}&sessionId={session.id}'
        )

        context = browser.contexts[0]
        page = await context.new_page()
        await page.goto('https://example.com')
        print(await page.title())

        await browser.close()

    client.sessions.release(session.id)

asyncio.run(main())

Verification Checklist

  • [ ] Install: pip install playwright steel-sdk && playwright install chromium
  • [ ] Set STEEL_API_KEY environment variable
  • [ ] Test Method 1 for basic connection
  • [ ] Upgrade to Method 2 for advanced features
  • [ ] Verify using browser.contexts[0] (not new context)
  • [ ] Confirm session releases

SOP Documentation Hub - Built from Steel.dev Official Docs