Skip to main content

Lightweight Chrome Debug Protocol (CDP) client for python

Project description

fastcdp

fastcdp provides an async Python client for the Chrome DevTools Protocol (CDP) over WebSocket. It auto-discovers Chrome’s debug port, loads the full protocol schema from bundled JSON files, and exposes every CDP domain as a Python attribute with auto-generated signatures and docstrings — e.g. await cdp.page.navigate(url=...).

It includes a Page class for tab-scoped operations, event subscription via cdp.on()/cdp.wait_event(), navigation helpers (goto, wait_for_selector, wait_for), screenshot capture, and accessibility tree access. A cdp_search utility lets you search CDP commands by name or description. For use inside safepyrun sandboxes, cdp_yolo() registers all CDP classes.

Installation

Install latest from pypi

$ pip install fastcdp

How to use

from fastcdp import *

Chrome 146+ has built-in remote debugging support. Navigate to chrome://inspect/#remote-debugging and enable “Allow remote debugging for this browser instance”:

image.png

Connect to Chrome (which will pop up a permissions window):

cdp = await CDP.connect()

Every CDP domain is available as an attribute with auto-generated signatures. You can search for commands with cdp_search:

cdp_search('screenshot')
"Emulation.setVisibleSize: Resizes the frame/viewport of the page. Note that this does not affect the frame's container\n(e.g. browser window). Can \nHeadlessExperimental.beginFrame: Sends a BeginFrame to the target and returns when the frame was completed. Optionally captures a\nscreenshot from the res\n  evt Overlay.screenshotRequested: Fired when user asks to capture screenshot of some area on the page.\nPage.captureScreenshot: Capture page screenshot."

List open pages and attach to one:

ps = await cdp.pages
pg = ps[0]
pg['title']
'l:SolveIT - scratch◀️chats'
tid = pg['targetId']
sid = await cdp.attach(tid)
await cdp.eval('document.title', sid)
'l:SolveIT - scratch◀️chats'

The Page class wraps a tab with its own session, so you don’t need to pass sid everywhere:

page = await cdp.new_page()
await page.goto('https://httpbin.org/forms/post')

You can wait_for any js expression to be truthy, and have it returned:

await page.wait_for('document.title')
'4. httpbin.org/forms/post'

Take a screenshot of the page:

img = await page.screenshot()

Clean up when done:

await page.close()
await cdp.close()

See CDP docs for full details.

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

fastcdp-0.0.3.tar.gz (178.7 kB view details)

Uploaded Source

Built Distribution

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

fastcdp-0.0.3-py3-none-any.whl (182.7 kB view details)

Uploaded Python 3

File details

Details for the file fastcdp-0.0.3.tar.gz.

File metadata

  • Download URL: fastcdp-0.0.3.tar.gz
  • Upload date:
  • Size: 178.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.0

File hashes

Hashes for fastcdp-0.0.3.tar.gz
Algorithm Hash digest
SHA256 6794e5dafe4e70ec590e63fdc54f6fda6c642ccab458c445bce9a62d35ff9b58
MD5 42220315378fa76e2f9374e233d1c65f
BLAKE2b-256 ad44615a24aef81fb21a993d69b5720af746f556cb3d8894c8577f1d893a2f2d

See more details on using hashes here.

File details

Details for the file fastcdp-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: fastcdp-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 182.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.0

File hashes

Hashes for fastcdp-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 86b2389e8725f32cd679adeae2d16d30e012f61545b4a68738fcfb9379a99f43
MD5 ad381b25cfd2928a89f46ec11d53bf71
BLAKE2b-256 7c7c79e93fc203790f79e38669c5e97e03efe7a1b3bf7588e4dca69ca4b63627

See more details on using hashes here.

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