跳转到文档内容

远程 CDP

创建有状态浏览器会话、连接 CDP 客户端,并为实时控制签发短时令牌。

APIv1当前版本
本页内容

使用 x-api-key 创建、列出和关闭会话;使用 cdpBaseUrl 中的数据令牌访问 discovery 与 CDP WebSocket,实时控制通道则使用 30 秒内一次有效的 controlToken。

POST/cdp/sessions

创建独立 CDP 会话

请求

请求头

字段类型说明
x-api-key必填string控制台创建的完整 API Key。
content-type必填application/json请求体必须是 JSON。

请求体

字段类型说明
idleTimeoutMsnumber空闲回收时间,超过服务端上限会被 clamp。
maxSessionMsnumber单个会话最大时长,超过服务端上限会被 clamp。
browserSettingsbrowserSettings推荐使用的浏览器设置对象。兼容旧调用把这些字段直接放在请求体顶层。

响应

201
application/json仅返回 sessionId、expiresAt 与已携带数据令牌的 cdpBaseUrl。cdpBaseUrl 可直接传给 Playwright connectOverCDP;discovery 字段需另行读取。
400
application/json代理地区、自定义代理或随机 User-Agent 参数无效。
401
application/json缺少或错误的 x-api-key。
429
application/json该 API Key 的会话数量达到上限。
502
application/jsonWorker 拒绝参数、结果过大或浏览器会话拉起失败。
503
application/json总容量、队列或 Worker 不可用。
504
application/json排队或浏览器会话启动超时。
500
application/json未归类的内部错误。

请求示例

cURL
curl -sS -X POST "https://api.adscrawl.net/cdp/sessions" \
  -H "content-type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"idleTimeoutMs":600000,"maxSessionMs":3600000,"browserSettings":{"viewport":{"width":1440,"height":900},"countryCode":"GLOBAL","userAgentMode":"random","userAgentOs":"windows"}}'
请求体 JSON
{
  "idleTimeoutMs": 600000,
  "maxSessionMs": 3600000,
  "browserSettings": {
    "viewport": { "width": 1440, "height": 900 },
    "countryCode": "GLOBAL",
    "userAgentMode": "random",
    "userAgentOs": "windows"
  }
}

响应示例

201 JSON
{
  "sessionId": "6c3f7d14-7fe4-4c8e-9f1b-0b6d6f2fa2ef",
  "expiresAt": "2026-04-21T10:30:00.000Z",
  "cdpBaseUrl": "https://api.adscrawl.net/cdp/sessions/6c3f7d14-7fe4-4c8e-9f1b-0b6d6f2fa2ef?token=<data-token>"
}
429 JSON
{
  "error": "CDP sessions per API key limit reached"
}
GET/cdp/sessions

列出当前 Key 的 CDP 会话

请求

请求头

字段类型说明
x-api-key必填string控制台创建的完整 API Key。

响应

200
application/json返回当前 Key 下的会话数组。
401
application/json缺少或错误的 x-api-key。
500
application/json会话或数据令牌读取失败。

请求示例

cURL
curl -sS "https://api.adscrawl.net/cdp/sessions" \
  -H "x-api-key: YOUR_API_KEY"

响应示例

200 JSON
{
  "ok": true,
  "data": [
    {
      "sessionId": "6c3f7d14-7fe4-4c8e-9f1b-0b6d6f2fa2ef",
      "expiresAt": "2026-04-21T10:30:00.000Z",
      "cdpBaseUrl": "https://api.adscrawl.net/cdp/sessions/6c3f7d14-7fe4-4c8e-9f1b-0b6d6f2fa2ef?token=<data-token>"
    }
  ]
}
DELETE/cdp/sessions/:sessionId

关闭 CDP 会话

请求

请求头

字段类型说明
x-api-key必填string控制台创建的完整 API Key。

路径参数

字段类型说明
sessionId必填string需要关闭的会话 ID。

响应

200
application/json关闭成功。
401
application/json缺少或错误的 x-api-key。
403
application/json该会话不属于当前 Key。
404
application/jsonsessionId 不存在。
409
application/json会话正在停止。
410
application/json会话已过期。
503
application/json分配的 Worker 不可用。

请求示例

cURL
curl -sS -X DELETE "https://api.adscrawl.net/cdp/sessions/SESSION_ID" \
  -H "x-api-key: YOUR_API_KEY"

响应示例

200 JSON
{
  "ok": true
}
404 JSON
{
  "error": "CDP session not found"
}
GET/cdp/sessions/:sessionId/json/version

读取 CDP discovery

请求

路径参数

字段类型说明
sessionId必填string创建或列表接口返回的会话 ID。

查询参数

字段类型说明
token必填stringcdpBaseUrl 中已携带的数据令牌;不要改用 x-api-key。

响应

200
application/json返回 Chrome discovery,并把 webSocketDebuggerUrl 重写到当前公开 session 路径。
401
application/json数据令牌缺失或无效。
404 / 409 / 410
application/json会话不存在、正在停止或已过期。
502
application/json上游 CDP discovery 获取失败。
503
application/json会话 Worker 不可用。

请求示例

cURL
curl -sS "https://api.adscrawl.net/cdp/sessions/SESSION_ID/json/version?token=DATA_TOKEN"

响应示例

200 JSON
{
  "Browser": "Chrome/136.0.0.0",
  "Protocol-Version": "1.3",
  "User-Agent": "Mozilla/5.0 ...",
  "V8-Version": "13.6.233.8",
  "WebKit-Version": "537.36 (@revision)",
  "webSocketDebuggerUrl": "wss://api.adscrawl.net/cdp/sessions/SESSION_ID/devtools/browser/BROWSER_ID?token=<data-token>"
}
WS/cdp/sessions/:sessionId/devtools/browser/:browserId

连接 CDP 协议 WebSocket

请求

路径参数

字段类型说明
sessionId必填string当前 CDP 会话 ID。
browserId必填stringdiscovery 返回的浏览器目标 ID;应直接使用返回的 webSocketDebuggerUrl。

查询参数

字段类型说明
token必填string与 discovery 相同的数据令牌。

响应

101
WebSocket协议升级成功,后续双向转发 Chrome DevTools Protocol 消息。
401
application/json数据令牌缺失或无效。
404 / 409 / 410
application/json会话不存在、正在停止或已过期。
502
application/json在返回 101 之前无法连接 Worker CDP。
503
application/json会话 Worker 不可用。

请求示例

JavaScript
const discovery = await fetch(
  "https://api.adscrawl.net/cdp/sessions/SESSION_ID/json/version?token=DATA_TOKEN",
).then((response) => response.json());

const socket = new WebSocket(discovery.webSocketDebuggerUrl);

响应示例

101 Switching Protocols
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
POST/cdp/live-token

签发实时控制令牌

请求

请求头

字段类型说明
x-api-key必填string必须拥有目标会话。
content-type必填application/json请求体必须是 JSON。

请求体

字段类型说明
sessionId必填string需要实时控制的活动会话 ID。

响应

200
application/json返回包含一次性 controlToken 的 controlUrl 和 Unix 毫秒 expiresAt;令牌 30 秒过期。
400
application/jsonsessionId 缺失。
401 / 403
application/jsonAPI Key 无效或不拥有该会话。
404 / 409 / 410
application/json会话不存在、正在停止或已过期。
503
application/json会话 Worker 不可用。
500
application/json控制令牌签发或存储失败。

请求示例

cURL
curl -sS -X POST "https://api.adscrawl.net/cdp/live-token" \
  -H "content-type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"sessionId":"SESSION_ID"}'

响应示例

200 JSON
{
  "ok": true,
  "controlUrl": "wss://api.adscrawl.net/cdp/live/SESSION_ID?controlToken=<single-use-token>",
  "expiresAt": 1785726630000
}
WS/cdp/live/:sessionId

连接实时控制 WebSocket

请求

路径参数

字段类型说明
sessionId必填stringcontrolUrl 中的会话 ID。

查询参数

字段类型说明
controlToken必填string由 /cdp/live-token 签发,30 秒内只能消费一次。

响应

101
WebSocket服务端先连通 Worker,再升级客户端 WebSocket。
401
application/jsoncontrolToken 无效、过期、已使用或与 sessionId 不匹配。
404 / 409 / 410
application/json会话不存在、正在停止或已过期。
502
application/json在 101 之前无法连接 CDP Worker。
503
application/json令牌存储或会话 Worker 不可用。

请求示例

JavaScript
const token = await fetch("https://api.adscrawl.net/cdp/live-token", {
  method: "POST",
  headers: {
    "content-type": "application/json",
    "x-api-key": "YOUR_API_KEY",
  },
  body: JSON.stringify({ sessionId: "SESSION_ID" }),
}).then((response) => response.json());

const socket = new WebSocket(token.controlUrl);

响应示例

101 Switching Protocols
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
关闭原因
1000 cdp_upstream_closed
1000 idle_timeout
1000 max_timeout
1011 cdp_upstream_disconnected
1011 cdp_upstream_error