Skip to main content

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)

注意事项

  1. 独立使用 CDP 需要 Chrome 以调试模式启动:--remote-debugging-port=9222
  2. Chromium 类会自动配置 --remote-allow-origins=* 参数
  3. CDP 请求在浏览器上下文中执行,共享 cookies 和 localStorage
  4. 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)

Uploaded Source

Built Distribution

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

pycdp_client-1.0.0-py3-none-any.whl (3.4 kB view details)

Uploaded Python 3

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

Hashes for pycdp_client-1.0.0.tar.gz
Algorithm Hash digest
SHA256 c642c096d7edfe8c1ab0b86c383c3f33a17288845211f4db332d505382f662b6
MD5 190b3bd35788c1c2e5a7e39d4a56f4ce
BLAKE2b-256 5fe146ff51e929ec916229d3e1714b1351fe510d42675305c603b4e484c2ec5d

See more details on using hashes here.

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

Hashes for pycdp_client-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 651c3306988c3ae2269d31fd8475940fcb7e365b319bdea44a68f85ae0d28128
MD5 6583064f9df91f0672627b40fe143780
BLAKE2b-256 e9cce9ccad35c6caa1fdd325eac7a1d65f1ba7cb34bfe3ee97b04fcde1fe6b23

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