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”:
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6794e5dafe4e70ec590e63fdc54f6fda6c642ccab458c445bce9a62d35ff9b58
|
|
| MD5 |
42220315378fa76e2f9374e233d1c65f
|
|
| BLAKE2b-256 |
ad44615a24aef81fb21a993d69b5720af746f556cb3d8894c8577f1d893a2f2d
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
86b2389e8725f32cd679adeae2d16d30e012f61545b4a68738fcfb9379a99f43
|
|
| MD5 |
ad381b25cfd2928a89f46ec11d53bf71
|
|
| BLAKE2b-256 |
7c7c79e93fc203790f79e38669c5e97e03efe7a1b3bf7588e4dca69ca4b63627
|