Sign in

    cdp

    MoonBit Chrome DevTools Protocol library

    cdp
    chrome-devtools-protocol
    chrome
    devtools
    browser-automation
    Download zip
    Author
    Version
    0.1.8
    License
    MIT
    Last updated
    3 months ago
    Downloads
    5K

    #justjavac/cdp

    License: MIT Non-generated library coverage

    MoonBit library for the Chrome DevTools Protocol (CDP).

    #Features

    • Target parsing: 9222, host:port, HTTP discovery URLs, browser/page WebSocket URLs.
    • Discovery: /json/version, /json/list, /json/protocol.
    • Commands: raw, bundled-schema-validated, remote-schema-checked, generated typed builders.
    • Events: buffering, filtering, synchronous handlers.
    • Targets: browser-level Target.* helpers and flattened sessions.
    • Launch: optional Chrome/Edge/Chromium startup with remote debugging.

    #Packages

    PackagePurpose
    justjavac/cdp/protocolWire types, bundled manifest, schema validation, remote schema diff.
    justjavac/cdp/protocol/typedGenerated params, command builders, event builders, result decoders.
    justjavac/cdp/clientDiscovery, WebSocket client, event buffer, target helpers, launch helpers.

    #Docs

    #Quick Start

    Install deps:

    moon install

    Start Chrome with remote debugging:

    chrome --remote-debugging-port=9222 --user-data-dir=/tmp/mbt-cdp-profile

    PowerShell:

    & "C:\Program Files\Google\Chrome\Application\chrome.exe" ` --remote-debugging-port=9222 ` --user-data-dir="$env:TEMP\mbt-cdp-profile"

    Browser-level command:

    let target = @client.parse_cdp_target("9222")
    let browser = @client.connect_cdp_browser_target(target)
    defer browser.close()

    let response = browser.send_schema_command("Browser.getVersion")
    println(@client.cdp_response_result_json(response).stringify())

    Page-level command:

    let page = @client.connect_cdp_page_target(@client.parse_cdp_target("9222"))
    defer page.close()

    let response = page.send_schema_command(
    "Runtime.evaluate",
    params={
    "expression": "1 + 1",
    "returnByValue": true,
    },
    )
    println(@client.cdp_response_result_json(response).stringify())

    Typed command builders live in justjavac/cdp/protocol/typed, for example @typed.runtime_evaluate_command.

    #Command Modes

    • Raw: send_cdp_command + recv_cdp_response.
    • Schema-aware: send_schema_command.
    • Remote-schema-aware: send_remote_schema_command.
    • Typed: generated builders + send_cdp_message.

    #Examples

    $env:MBT_CDP_TARGET = "9222" $env:MBT_CDP_EXAMPLE = "discover_version" moon -C examples run cmd $env:MBT_CDP_EXAMPLE = "runtime_evaluate" moon -C examples run cmd

    #Checks

    moon test node tools/check_non_generated_coverage.mjs 100

    Opt-in real-browser E2E:

    $env:MBT_CDP_E2E = "1" $env:MBT_CDP_TARGET = "9222" moon test client --filter "*real Chrome CDP E2E*"

    #License

    MIT. See LICENSE.