Skip to main content

WebDriver BiDi for Python — talk to any browser via W3C standard

Project description

bidiwave

WebDriver BiDi for Python — talk to any browser via W3C standard.

CI PyPI Python License

Features

  • W3C WebDriver BiDi — standard, not proprietary CDP
  • Cross-browser — Chrome, Firefox, Edge (Safari when BiDi support lands)
  • Async-first — native async/await with asyncio
  • Event streaming — console logs, navigation, network, contexts in real time
  • Input simulation — clicks, keyboard, scroll, drag & drop via input.performActions
  • Network interception — block, modify and mock HTTP requests
  • Type-safe — Pydantic v2 models, type narrowing with match
  • Lightweight — no Selenium, no Playwright required

Install

pip install bidiwave

Quick start

import asyncio
from bidiwave import BiDiClient, StringValue

async def main():
    async with await BiDiClient.connect("ws://localhost:9222/session") as client:
        await client.session.new()

        async with await client.browsing.open("https://example.com") as page:
            # Evaluate JS
            result = await page.evaluate("document.title")
            match result:
                case StringValue(value=title):
                    print(f"Title: {title}")

            # Screenshot
            screenshot = await page.screenshot()
            with open("screenshot.png", "wb") as f:
                f.write(screenshot)

asyncio.run(main())

Console log monitoring

async with await BiDiClient.connect(url) as client:
    async def on_log(entry):
        print(f"[{entry.level}] {entry.text}")

    client.on("log.entryAdded", on_log)
    await client.session.subscribe(["log.entryAdded"])

    async with await client.browsing.open("https://example.com") as page:
        await page.evaluate("console.log('hello!')")
        await asyncio.sleep(2)

Input simulation

async with await BiDiClient.connect(url) as client:
    async with await client.browsing.open("https://example.com") as page:
        ctx = page.context

        # Click at coordinates
        await client.input.click(ctx, x=100, y=200)

        # Type text
        await client.input.type_text(ctx, "Hello, world!")

        # Press Enter
        await client.input.press_key(ctx, "Enter")

        # Scroll down 500px
        await client.input.scroll(ctx, delta_y=500)

        # Drag and drop
        await client.input.drag_and_drop(ctx, 100, 100, 300, 300)

Network interception

async with await BiDiClient.connect(url) as client:
    # Block all requests to ads
    intercept = await client.network.add_intercept(
        phases=["beforeRequestSent"],
        url_patterns=["*ads.example.com*"],
    )

    async with await client.browsing.open("https://example.com") as page:
        await asyncio.sleep(2)

    await client.network.remove_intercept(intercept.intercept_id)

Launch a browser with BiDi

Chrome

google-chrome --headless=new --remote-debugging-port=9222 --enable-bidi

Firefox

firefox --headless --remote-debugging-port=9223 --no-remote

Documentation

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bidiwave-1.7.2.tar.gz (96.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bidiwave-1.7.2-py3-none-any.whl (41.1 kB view details)

Uploaded Python 3

File details

Details for the file bidiwave-1.7.2.tar.gz.

File metadata

  • Download URL: bidiwave-1.7.2.tar.gz
  • Upload date:
  • Size: 96.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for bidiwave-1.7.2.tar.gz
Algorithm Hash digest
SHA256 f6b05a36e0fcfa7f041a6ef39a586eb498e4fb86686d69d349f43671cf29a753
MD5 436a025fe1a5bda0dd6db3153f6fb4e4
BLAKE2b-256 25a71bf4889c9a402bc8b62d4f1b04ac8ce91ba2705f4341eaddc2d75f8d5fe3

See more details on using hashes here.

Provenance

The following attestation bundles were made for bidiwave-1.7.2.tar.gz:

Publisher: release.yml on MathiasPaulenko/bidiwave

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bidiwave-1.7.2-py3-none-any.whl.

File metadata

  • Download URL: bidiwave-1.7.2-py3-none-any.whl
  • Upload date:
  • Size: 41.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for bidiwave-1.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 660f4015d73e8df7831222407a9153d39e53b50ad226de860ea53678adcb32ac
MD5 3c926577b561d8c76466671480326d0b
BLAKE2b-256 34e2b3a02665e9124a6efdfab66fe59f2f2d16b21b63251af01763eb5177e752

See more details on using hashes here.

Provenance

The following attestation bundles were made for bidiwave-1.7.2-py3-none-any.whl:

Publisher: release.yml on MathiasPaulenko/bidiwave

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page