Skip to main content

PyBA

Tell the AI what to do once. Get a Python script you can run forever.

PyBA uses LLMs to autonomously navigate any website, then exports the session as a standalone Playwright script - no API costs on repeat runs.

  

PyPI • Documentation • OpenHub


The Problem with AI Browser Agents

Every AI browser agent has the same issue: you pay for every single run.

  • Run it 100 times? Pay for 100 LLM calls.
  • Same task every day? Pay every day.
  • The AI figures out the same clicks over and over.

PyBA is different. Let the AI figure it out once, then export a deterministic script you own forever.

from pyba import Engine

engine = Engine(openai_api_key="sk-...")

# Step 1: AI navigates autonomously
engine.sync_run(
    prompt="Go to Hacker News, click the top story, extract all comments"
)

# Step 2: Export as a standalone Playwright script
engine.generate_code(output_path="hacker_news_scraper.py")

Now run python hacker_news_scraper.py forever. No AI. No API costs. Just Playwright.


Installation

pip install py-browser-automation

What Can You Do?

Automate Repetitive Browser Tasks

engine.sync_run(
    prompt="Login to my bank, download this month's statement as PDF",
    automated_login_sites=["swissbank"]
)
engine.generate_code("download_statement.py")

OSINT & Reconnaissance

from pyba import DFS

dfs = DFS(openai_api_key="sk-...")
dfs.sync_run(
    prompt="Find all social media accounts linked to username 'targetuser123'"
)

Structured Data Extraction

from pydantic import BaseModel

class Product(BaseModel):
    name: str
    price: float
    rating: float

engine.sync_run(
    prompt="Scrape all products from the first 3 pages",
    extraction_format=Product
)
# Data is extracted DURING navigation, stored in your database

Authenticated Workflows

engine.sync_run(
    prompt="Go to my Instagram DMs and message john Paula 'Running 10 mins late'",
    automated_login_sites=["instagram"]
)
# Credentials come from env vars - never exposed to the LLM

Four Exploration Modes

Mode Use Case Example
Normal Direct task execution "Fill out this form and submit"
Step Interactive, step-by-step control "Click here" → "Now search for X" → "Extract that"
DFS Deep investigation "Analyze this GitHub user's contribution patterns"
BFS Wide discovery "Map all pages linked from this homepage"
from pyba import Engine, Step, DFS, BFS

# Normal mode (default)
engine = Engine(openai_api_key="...")

# Step-by-step interactive mode
step = Step(openai_api_key="...")

# Deep-first exploration
dfs = DFS(openai_api_key="...")

# Breadth-first discovery
bfs = BFS(openai_api_key="...")

Interactive Step-by-Step Automation

from pyba import Step

step = Step(openai_api_key="sk-...")

await step.start()
await step.step("Go to google.com and search for 'playwright python'")
await step.step("Click the first result")
output = await step.step("Extract the installation instructions")
await step.stop()

Key Features

Code Generation

Export any successful run as a standalone Python script. Run it forever without AI.

Trace Files

Every run generates a Playwright trace.zip — replay exactly what happened in Trace Viewer.

Stealth Mode

Anti-fingerprinting, random mouse movements, human-like delays. Bypass common bot detection.

Multi-Provider

Works with OpenAI, Google VertexAI, or Gemini.

Database Logging

Store every action in SQLite, PostgreSQL, or MySQL. Audit trails and replay capability.

Platform Logins

Built-in login handlers for Instagram, Gmail, Facebook. Credentials stay in env vars.


Quick Examples

Extract YouTube Video Metadata

engine.sync_run(
    prompt="Go to this YouTube video and extract: title, view count, like count, channel name, upload date"
)

Fill a Multi-Page Form

engine.sync_run(
    prompt="Fill out the job application: Name='John Doe', Email='john@email.com', upload resume from ~/resume.pdf, submit"
)
engine.generate_code("job_application.py")  # Replay anytime

Research a Company

dfs = DFS(openai_api_key="...")
dfs.sync_run(
    prompt="Find the leadership team, recent news, and funding history for Acme Corp"
)


Configuration

from pyba import Engine, Database

# With database logging
db = Database(engine="sqlite", name="runs.db")

engine = Engine(
    openai_api_key="sk-...",
    headless=False,           # Watch it work
    enable_tracing=True,      # Generate trace.zip
    max_depth=20,             # Max actions per run
    database=db               # Log everything
)

See full configuration options in the docs.


Origin

PyBA was built for automated intelligence and OSINT — replicating everything a human analyst can do in a browser, but with reproducibility and speed.

If you're doing security research, competitive intelligence, or just automating tedious browser tasks, this is for you.


Status

v0.3.0 - Active development. First stable release: December 18, 2025.

Breaking changes may occur. Pin your version in production.


If PyBA saved you time, consider giving it a ⭐

Metadata

Release files for py-browser-automation 0.3.24

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for py-browser-automation 0.3.24
File Size Uploaded
py_browser_automation-0.3.24.tar.gz 64.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for py-browser-automation 0.3.24
File Interpreter ABI Platform
py_browser_automation-0.3.24-py3-none-any.whl Python 3 none any Details

Total release size: 158.3 kB

Release files / py_browser_automation-0.3.24.tar.gz

Download URL py_browser_automation-0.3.24.tar.gz
Size 64.8 kB
Tags Source
SHA-256 checksum
How to use checksums
b306ed69e5f3e307205b29af2300335d1b2f889dce2814d905956d7107f64ed6
BLAKE2b-256 checksum
How to use checksums
b38837a4ef8c0b51aa4a777049dd3768db9ec2ec4a4c40dd1fd89f1d27c4bede
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release files / py_browser_automation-0.3.24-py3-none-any.whl

Download URL py_browser_automation-0.3.24-py3-none-any.whl
Size 93.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
94a043cc24e74753019cf8e9303aed340f7c0fc439666d46f0662b4994a8a4ca
BLAKE2b-256 checksum
How to use checksums
658c1b1d198e60c6489673a65c35979acdc909aaed0da062bb6b33fee8352a68
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release history Release notifications | RSS feed

This release

0.3.24 This release

2 release files

0.3.23

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page