Skip to main content

Browser Automation

Control headless browsers on InstaVM for web scraping, testing, and automated workflows.

Quick start

from instavm import InstaVM

client = InstaVM("your_api_key")

with client.browser.create_session() as session:
session.navigate("https://example.com")
screenshot = session.screenshot()
print(f"Screenshot: {len(screenshot)} chars (base64)")
session.navigate("https://example.com", wait_timeout=30000)

Form interaction

Fill and submit forms:

with client.browser.create_session() as session:
session.navigate("https://example.com/login")
session.fill("input[name='email']", "user@example.com")
session.fill("input[name='password']", "password123")
session.click("button[type='submit']")
session.wait_for("visible", selector=".dashboard")

Screenshots

# Full page
full = session.screenshot(full_page=True)

# Clipped region
clipped = session.screenshot(
full_page=False,
clip={"x": 0, "y": 0, "width": 800, "height": 600}
)

Data extraction

Extract structured data from pages:

with client.browser.create_session() as session:
session.navigate("https://news.ycombinator.com")
session.wait_for("load")

posts = session.extract_elements(
selector=".titleline > a",
attributes=["href", "text"]
)

for post in posts[:5]:
print(f"{post['text']}: {post['href']}")

Scrolling and waiting

# Scroll to load more content
session.scroll(y=1000)

# Wait for element to appear
session.wait_for("visible", selector="div.content", timeout=5000)

# Wait for page load
session.wait_for("load", timeout=30000)

Multi-page workflows

with client.browser.create_session() as session:
# Page 1: Search
session.navigate("https://example.com")
session.fill("input#search", "instavm")
session.click("button[type='submit']")
session.wait_for("visible", selector=".results")

# Page 2: Click first result
session.click(".results a:first-child")
session.wait_for("load")

# Extract content
content = session.extract_elements("article", ["text"])
print(content[0]["text"])

Error handling

from instavm import (
InstaVM,
ElementNotFoundError,
BrowserTimeoutError,
BrowserNavigationError
)

try:
session.click("button.nonexistent")
except ElementNotFoundError as e:
print(f"Element not found: {e}")
except BrowserTimeoutError as e:
print(f"Timed out: {e}")
except BrowserNavigationError as e:
print(f"Navigation failed: {e}")

TypeScript

import { InstaVM } from 'instavm';

const client = new InstaVM('your_api_key');
const session = await client.browser.createSession({
viewportWidth: 1920,
viewportHeight: 1080
});

await session.navigate('https://example.com');
const elements = await session.extractElements('h1', ['text']);
console.log(elements);
await session.close();

Next steps