Chrome DevTools Protocol Toolkit in Python
Project description
CDPKit: A Python Implementation of the CDP(Chrome DevTools Protocol)Toolkit
English | 中文
Overview
CDPKit is a toolkit for the Chrome DevTools Protocol (CDP). The protocol component of this project is built on pydantic, supporting friendly code completion and parameter type checking. It also provides a connection module that enables CDP interactions via the remote-debugging-port.
Key Features
- Type Safety: Leverages
pydanticto automatically implement type checking for command inputs and outputs. - Rich Type Hints: Provides type hints for command results, eliminating the need to consult documentation for return values.
- Dynamic Code Generation: Generates protocol code based on the official CDP JSON schema, ensuring fast updates.
- Async Performance: Offers an asynchronous CDPSessionManager that abstracts communication logic, allowing direct method calls.
Installation
1. Install by pip
pip install cdpkits
2. Install by uv
- 2.1. Install uv(if not currently installed)
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS and Linux
# on Windows:
# powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- 2.2. Clone the repository:
git clone https://github.com/yie1d/cdpkit.git
cd cdpkit
- 2.3. Create a new virtual environment and activate it:
uv venv
source .venv/bin/activate # On Unix/macOS
# Or on Windows:
# .venv\Scripts\activate
- 2.4. Install dependencies:
uv sync
Basic Usage
Quick Start
import asyncio
from cdpkit.connection import CDPSessionManager
from cdpkit.protocol import Target
async def main():
# Connect to the currently running browser (debug port 9222)
session_manager = CDPSessionManager(ws_endpoint='localhost:9222')
cdp_session = await session_manager.get_session()
# Get information on all currently open targets.
target_resp = await cdp_session.execute(Target.GetTargets())
for target_info in target_resp.targetInfos:
print(target_info.model_dump())
asyncio.run(main())
Use CDPSessionExecutor
import asyncio
from cdpkit.connection import CDPSessionManager, CDPSessionExecutor
from cdpkit.protocol import Target, Page
async def on_dialog_open(event_data: Page.JavascriptDialogOpening):
"""
Callback function for the alert dialog
Args:
event_data (Page.JavascriptDialogOpening):
If the event_data parameter is provided,
it must be used as the parameter for receiving the event and must match the actual event type.
Returns:
"""
print(event_data.message)
async def main():
session_manager = CDPSessionManager(ws_endpoint='localhost:9225')
browser_session = await session_manager.get_session()
# execute command
target_resp = await browser_session.execute(Target.GetTargets(filter_=[{
'type': 'page',
'exclude': False
}]))
target_id = None
for target_info in target_resp.targetInfos:
if not target_info.url.startswith('devtools://') and not target_info.url.startswith('chrome-extension://'):
target_id = target_info.targetId
break
if not target_id:
raise Exception('No target found')
# Retrieve the specified target session
cdp_session = await session_manager.get_session(target_id=target_id)
session_executor = CDPSessionExecutor(session=cdp_session, session_manager=session_manager)
# execute by CDPSessionExecutor
# Enable page events
await session_executor.execute_method(Page.Enable())
# Listen for events
await session_executor.on(
event=Page.JavascriptDialogOpening,
callback=on_dialog_open
)
# You can manually run alert('test Page.JavascriptDialogOpening event') in the browser's console to see the listener in action.
await asyncio.sleep(500)
asyncio.run(main())
More usage
You can refer to webauto — a browser-automation tool based on CDPKit (work in progress).
Project details
Release history Release notifications | RSS feed
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 cdpkits-1.2.14.tar.gz.
File metadata
- Download URL: cdpkits-1.2.14.tar.gz
- Upload date:
- Size: 192.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66f2264646fa2a7af81b2a4469c66c9d0ae3c7ec02d83ea6d259f2c301f1f885
|
|
| MD5 |
1d502823272e27ce8097048bb42f35ea
|
|
| BLAKE2b-256 |
603c459e044d8ab06093fed8472654ca232e1bd495bc09aff9ae67349944e39d
|
File details
Details for the file cdpkits-1.2.14-py3-none-any.whl.
File metadata
- Download URL: cdpkits-1.2.14-py3-none-any.whl
- Upload date:
- Size: 273.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6557bb8927b0100150522d29cc59437db5125d29e988934c0c2187c8af25d690
|
|
| MD5 |
e48bde20ebee4d0f61cef4f7b7ddbf09
|
|
| BLAKE2b-256 |
50e229391921affc51ce1cd1cc427b2cfc898ee0773c09b779751ae5df75cea0
|