本页内容 创建独立 CDP 会话 列出当前 Key 的 CDP 会话 关闭 CDP 会话 读取 CDP discovery 连接 CDP 协议 WebSocket 签发实时控制令牌 连接实时控制 WebSocket 使用 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 -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"}}' {
"idleTimeoutMs" : 600000 ,
"maxSessionMs" : 3600000 ,
"browserSettings" : {
"viewport" : { "width" : 1440 , "height" : 900 } ,
"countryCode" : "GLOBAL" ,
"userAgentMode" : "random" ,
"userAgentOs" : "windows"
}
} 响应示例 {
"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>"
} {
"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 -sS "https://api.adscrawl.net/cdp/sessions" \
-H "x-api-key: YOUR_API_KEY" 响应示例 {
"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 -sS -X DELETE "https://api.adscrawl.net/cdp/sessions/SESSION_ID" \
-H "x-api-key: YOUR_API_KEY" 响应示例 {
"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 -sS "https://api.adscrawl.net/cdp/sessions/SESSION_ID/json/version?token=DATA_TOKEN" 响应示例 {
"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 不可用。请求示例 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) ; 响应示例 HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: UpgradePOST /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 -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"}' 响应示例 {
"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 不可用。请求示例 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) ; 响应示例 HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade1000 cdp_upstream_closed
1000 idle_timeout
1000 max_timeout
1011 cdp_upstream_disconnected
1011 cdp_upstream_error