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.5.tar.gz (79.3 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.5-py3-none-any.whl (39.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: bidiwave-1.6.5.tar.gz
  • Upload date:
  • Size: 79.3 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.5.tar.gz
Algorithm Hash digest
SHA256 127e4dd8fd1420c176dc10b8274dbaffbff2176d6ac646a2ab652b673545cdca
MD5 92b26945ca73963967b4547bc9eb3669
BLAKE2b-256 3b807b1ca476cb593e1171eabfa4e9a829729b9e6d749869edcf6f0e75eb2e75

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: bidiwave-1.6.5-py3-none-any.whl
  • Upload date:
  • Size: 39.8 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.5-py3-none-any.whl
Algorithm Hash digest
SHA256 545e34e94defe4c8b193df29791731e7539b16674ea0cafa0e4a5a3fe2e07f00
MD5 7198f7ef2efedcabe7941fa98a3d053d
BLAKE2b-256 5596ab56669f1468586d97dab5e0d905d5c782801acba87b67fb758faf1b80f1

See more details on using hashes here.

Provenance

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