Selenium Guide
Early AccessConnect Selenium to Steel for managed browser sessions.
Limited Feature Support
Selenium integration is in early stages and NOT at feature parity with Playwright/Puppeteer:
- No automatic CAPTCHA solving
- No custom proxy configurations
- Limited advanced session management
- No live session viewer support
Custom Connection Handler
Selenium requires a custom connection class to pass Steel headers:
python
import os
from selenium.webdriver.remote.remote_connection import RemoteConnection
class SteelRemoteConnection(RemoteConnection):
def __init__(self, remote_server_addr: str, session_id: str):
super().__init__(remote_server_addr)
self._session_id = session_id
def get_remote_connection_headers(self, parsed_url, keep_alive=False):
headers = super().get_remote_connection_headers(parsed_url, keep_alive)
headers.update({
'steel-api-key': os.environ.get("STEEL_API_KEY"),
'session-id': self._session_id
})
return headersConnect to Steel
python
import os
from steel import Steel
from selenium import webdriver
client = Steel(steel_api_key=os.getenv('STEEL_API_KEY'))
def main():
# Create session with is_selenium=True
session = client.sessions.create(is_selenium=True)
# Connect via custom handler
driver = webdriver.Remote(
command_executor=SteelRemoteConnection(
remote_server_addr='http://connect.steelbrowser.com/selenium',
session_id=session.id
),
options=webdriver.ChromeOptions()
)
driver.get('https://example.com')
print(driver.title)
# Cleanup
driver.quit()
client.sessions.release(session.id)
main()Key Differences from Playwright/Puppeteer
- Must pass
is_selenium=Truewhen creating the session - Connects via
http://connect.steelbrowser.com/selenium(HTTP, not WebSocket) - Requires custom
RemoteConnectionsubclass for auth headers
Verification Checklist
- [ ] Install:
pip install steel-sdk selenium - [ ] Set
STEEL_API_KEYenvironment variable - [ ] Create
SteelRemoteConnectionclass - [ ] Test basic connection
- [ ] Confirm session cleanup