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.6.3.tar.gz (78.2 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.6.3-py3-none-any.whl (39.2 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for bidiwave-1.6.3.tar.gz
Algorithm Hash digest
SHA256 af28f93ed3c433207f2a422fded469d66dda794a714293f67109f49da5158587
MD5 b3b88c949ee31349e265a97f12a1bd33
BLAKE2b-256 a01b34250d252fbc1d33413843d849041d47a526d2e75b6abba2c501a0d5b6bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for bidiwave-1.6.3.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.6.3-py3-none-any.whl.

File metadata

  • Download URL: bidiwave-1.6.3-py3-none-any.whl
  • Upload date:
  • Size: 39.2 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.6.3-py3-none-any.whl
Algorithm Hash digest
SHA256 1b6b0ce39c6b1628d1711883f50853d3ac6fe1e4a3ffec7e6c0ea76bba1f7afb
MD5 071df6279155fe53d24b5822f7c4bb28
BLAKE2b-256 1a6038c2117d049f0c29e68336ac5aa45c16b647b4aab88f999fe12690b35046

See more details on using hashes here.

Provenance

The following attestation bundles were made for bidiwave-1.6.3-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