Chrome DevTools Protocol 客户端,支持独立使用或与 DrissionPage 配合
Project description
PyCDP - Chrome DevTools Protocol 客户端
支持独立使用或与 DrissionPage 配合使用的 CDP 客户端。
特性
- 独立 CDP 客户端,无需 DrissionPage 依赖
- 可选集成 DrissionPage,继承
Chromium类 - 支持绕过反爬的请求(在浏览器上下文中执行)
- 完整的 IDE 类型提示支持
- 支持共享 CDP 实例
安装依赖
# 最小依赖(仅 CDP)
pip install requests websocket-client
# 完整依赖(CDP + DrissionPage)
pip install DrissionPage requests websocket-client
三种使用模式
模式一:独立 CDP(无需 DrissionPage)
from pycdp import CDP
# 连接到已运行的 Chrome(需要 --remote-debugging-port=9222)
cdp = CDP(9222)
# 发送请求(绕过反爬)
result = cdp.post('https://api.example.com/data', body={"key": "value"})
print(result) # {'status': 200, 'data': {...}}
# 执行 JS
title = cdp.run('document.title')
# 关闭连接
cdp.close()
模式二:Chromium + CDP
from pycdp import Chromium
# 创建浏览器实例(自动创建 CDP)
browser = Chromium()
# DrissionPage 操作
browser.get("https://example.com")
browser.ele('选择器').click()
# CDP 请求(通过 cdp 属性)
result = browser.cdp.post('https://api.example.com/data', body={"key": "value"})
# 关闭
browser.quit()
模式三:共享 CDP 实例
from pycdp import CDP, Chromium
# 先创建 CDP
cdp = CDP(9222)
# 传入 Chromium 共享使用
browser = Chromium(cdp=cdp)
# 两者共享同一个 CDP 连接
browser.get("https://example.com")
result = cdp.post('https://api.example.com/data') # 使用同一个连接
API 文档
CDP 类
独立的 CDP 客户端。
from pycdp import CDP
cdp = CDP(port=9222) # 默认端口 9222
方法
| 方法 | 说明 |
|---|---|
get(url, headers=None, token_key=None, extra=None) |
GET 请求 |
post(url, body=None, headers=None, token_key=None, extra=None) |
POST 请求 |
put(url, body=None, headers=None, token_key=None, extra=None) |
PUT 请求 |
delete(url, headers=None, token_key=None, extra=None) |
DELETE 请求 |
request(url, method, body, headers, token_key, extra) |
通用请求 |
run(js, wait=False) |
执行 JavaScript |
storage(key, value=None, storage='localStorage') |
操作 Storage |
cookies(name=None) |
获取 Cookies |
close() |
关闭连接 |
请求示例
# GET 请求
result = cdp.get('https://api.example.com/data')
# POST 请求
result = cdp.post('https://api.example.com/data', body={"name": "test"})
# 带 token 的请求(自动从 localStorage 获取)
result = cdp.get('https://api.example.com/user', token_key='ACCESS_TOKEN')
# 带额外请求头
result = cdp.post('https://api.example.com/data',
body={"key": "value"},
extra={"X-Custom-Header": "custom-value"}
)
执行 JavaScript
# 同步执行
title = cdp.run('document.title')
# 异步执行(等待 Promise)
result = cdp.run('fetch("/api/data").then(r=>r.json())', wait=True)
操作 Storage
# 获取 localStorage
token = cdp.storage('token')
# 设置 localStorage
cdp.storage('token', 'new_value')
# 操作 sessionStorage
cdp.storage('key', 'value', storage='sessionStorage')
获取 Cookies
# 获取所有 cookies
all_cookies = cdp.cookies()
# 获取指定 cookie
session = cdp.cookies('session_id')
Chromium 类
继承 DrissionPage 的 Chromium,集成 CDP 功能。
from pycdp import Chromium
# 默认配置
browser = Chromium()
# 使用 ChromiumOptions
from DrissionPage import ChromiumOptions
opts = ChromiumOptions().set_local_port(9333)
browser = Chromium(opts)
# 共享 CDP 实例
from pycdp import CDP
cdp = CDP(9222)
browser = Chromium(cdp=cdp)
属性
| 属性 | 说明 |
|---|---|
cdp |
获取 CDP 实例 |
wait |
等待操作(代理 latest_tab) |
url |
当前页面 URL |
html |
页面 HTML |
方法
| 方法 | 说明 |
|---|---|
get(url, **kwargs) |
访问页面(代理 latest_tab) |
ele(locator, timeout=None) |
查找元素 |
eles(locator, timeout=None) |
查找多个元素 |
完整示例
from pycdp import Chromium
# 创建浏览器
browser = Chromium()
# 访问登录页
browser.get("https://example.com/login")
# 自动化登录
browser.ele('#username').input('user@example.com')
browser.ele('#password').input('password123')
browser.ele('#login-btn').click()
# 等待登录完成
browser.wait.load_start()
# CDP 请求获取数据
result = browser.cdp.get('https://api.example.com/user/profile')
print(f"用户信息: {result['data']}")
# 获取 token
token = browser.cdp.storage('ACCESS_TOKEN')
print(f"Token: {token}")
# 关闭
browser.quit()
上下文管理器
from pycdp import CDP
# 自动关闭连接
with CDP(9222) as cdp:
result = cdp.get('https://api.example.com/data')
print(result)
注意事项
- 独立使用 CDP 需要 Chrome 以调试模式启动:
--remote-debugging-port=9222 - Chromium 类会自动配置
--remote-allow-origins=*参数 - CDP 请求在浏览器上下文中执行,共享 cookies 和 localStorage
- CDP 实例会在
__del__时自动关闭,也可手动调用close()
功能对比
| 功能 | CDP | Chromium |
|---|---|---|
| 绕过反爬请求 | ✅ | ✅ (通过 cdp 属性) |
| 执行 JS | ✅ | ✅ |
| 操作 Storage | ✅ | ✅ |
| 获取 Cookies | ✅ | ✅ |
| 页面自动化 | ❌ | ✅ |
| 元素操作 | ❌ | ✅ |
| 需要 DrissionPage | ❌ | ✅ |
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
pycdp_client-1.0.0.tar.gz
(3.6 kB
view details)
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 pycdp_client-1.0.0.tar.gz.
File metadata
- Download URL: pycdp_client-1.0.0.tar.gz
- Upload date:
- Size: 3.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c642c096d7edfe8c1ab0b86c383c3f33a17288845211f4db332d505382f662b6
|
|
| MD5 |
190b3bd35788c1c2e5a7e39d4a56f4ce
|
|
| BLAKE2b-256 |
5fe146ff51e929ec916229d3e1714b1351fe510d42675305c603b4e484c2ec5d
|
File details
Details for the file pycdp_client-1.0.0-py3-none-any.whl.
File metadata
- Download URL: pycdp_client-1.0.0-py3-none-any.whl
- Upload date:
- Size: 3.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
651c3306988c3ae2269d31fd8475940fcb7e365b319bdea44a68f85ae0d28128
|
|
| MD5 |
6583064f9df91f0672627b40fe143780
|
|
| BLAKE2b-256 |
e9cce9ccad35c6caa1fdd325eac7a1d65f1ba7cb34bfe3ee97b04fcde1fe6b23
|