CDP浏览器大师

CDP浏览器大师是通过Chrome DevTools Protocol驱动已登录浏览器执行自动化任务的能力包。 它不只给API列表,更解决四个高频痛点:反爬检测导致被封、网站改版选择器失效、 Next.js等SPA内部路由难导航、固定sleep等待不准要么太快要么太慢。 核心能力: - 反检测策略:UA伪装、We...

天轰穿

@thcjp

What This Skill Does

Drives a user's already-logged-in Chrome or Edge browser via Chrome DevTools Protocol to automate tasks like data extraction, form filling, and navigation on JS-heavy or anti-bot sites. Includes anti-detection, selector probing, SPA routing, and smart wait strategies.

Replaces fragile fixed-delay scripts and manual browser automation by providing anti-detection, multi-selector fallback, and network-idle waiting out of the box.

When to Use It

  • Extract data from JS-rendered pages like Bilibili or SPA dashboards
  • Automate login-required actions on sites already authenticated in your browser
  • Click, fill forms, or scroll through dynamic content that static fetch cannot handle
  • Navigate internal routes in Next.js or React SPAs that would otherwise return 404
  • Read HttpOnly cookies from a logged-in browser session
  • Query platform quotas or account info from sites with anti-bot protections

Install

$ openclaw skills install @thcjp/cdp-browser-master

核心功能: 本技能提供中文交互、化工作流场景等能力。

CDP浏览器大师

通过用户已登录的浏览器(Edge/Chrome)执行自动化任务。核心技术:CDP(Chrome DevTools Protocol),通过WebSocket与浏览器通信。核心信条:优先用web_fetch,CDP只用于JS渲染或需登录态的场景;先探测再定位,多备选降级。

能力简介

1. 反检测策略

UA天然真实(用已登录浏览器)、启动参数--disable-blink-features=AutomationControlled规避WebDriver标记、行为拟人化(随机延迟)、Cloudflare绕过(复用已验证会话)。使用input_params参数支持创建/查询/导出操作。

2. 选择器探测模式

先eval探索DOM结构(打印class/tag/text样本),再写精确选择器,提供多备选(精确class→模糊[class*="未指定"]→语义tag→属性选择器)降级匹配。

3. SPA导航模式

处理Next.js/React内部路由,先入可访问父页面(如/user-center/basic-information),再用JS点击侧边栏<div cursor-pointer>触发内部路由跳转,避免直接navigate子路由404。

4. 智能等待

waitNetworkIdle检测无请求持续500ms即继续,替代固定sleep,既不快也不慢。

5. Cookie获取

普通Cookie用document.cookie,HttpOnly Cookie用CDP Network.getCookies命令获取。

6. 连接管理

端口复用(每端口同时一个WebSocket)、ConnectionManager自动管理、残留连接清理、端口占用排查。

快速指引

  1. 确认运行环境满足依赖说明中的要求
  2. 在AI Agent对话中调用本技能,提供必要的输入参数
  3. 检查输出结果,根据需要进行后续处理

详细的输入输出格式请参考下方章节说明。

应用场景

何时使用: JS渲染页面抓取(B站、SPA应用)、需登录态的网站操作、需要交互(点击/填表/滚动)的自动化、平台配额查询、多标签页管理与数据提取

不适用场景: 静态HTML页面抓取(用web_fetch即可)、无浏览器环境的服务器、强反爬站点且无法通过验证页的场景

关键参数说明

模块方法关键参数说明
edge/chromegoto(url)url:目标地址导航到指定页面
edge/chromeJSON.parse(js)js:JS表达式字符串在页面执行JS并返回结果
edge/chromeclick(selector)selector:CSS选择器点击元素
edge/chromewaitNetworkIdle(timeout)timeout:最大等待ms(默认10000)智能等待网络空闲
edge/chromescreenshot()返回PNG base64截图

启动浏览器远程调试:

  • Edge: Start-Process msedge.exe --remote-debugging-port=9222 --disable-blink-features=AutomationControlled
  • Chrome: Start-Process chrome.exe --remote-debugging-port=9223
  • 模块导入: const { edge, chrome } = require('./cdp-automation.js');

典型流程: 导航→探测DOM(eval打印结构)→操作(click/填表)→智能等待(waitNetworkIdle)→提取数据(eval/screenshot)。SPA导航需先入父页面再JS点击侧边栏div。

示例代码

1. 启动浏览器远程调试(PowerShell)

以反检测参数启动Edge,开启9222调试端口:

# Edge:开启远程调试并禁用自动化标记
Start-Process msedge.exe -ArgumentList @(
    "--remote-debugging-port=9222",
    "--disable-blink-features=AutomationControlled",
    "--user-data-dir=$env:LOCALAPPDATA\Microsoft\Edge\User Data"
)

# Chrome:9223端口
Start-Process chrome.exe -ArgumentList @(
    "--remote-debugging-port=9223",
    "--disable-blink-features=AutomationControlled"
)

# 验证端口是否就绪
Invoke-RestMethod -Uri "http://localhost:9222/json/version" | Select-Object webSocketDebuggerUrl

2. CDP自动化完整流程(Node.js)

导航→探测DOM→点击→智能等待→提取数据的典型流程:

const { edge } = require('./cdp-automation.js');

async function scrapeOrderList() {
  // 1. 导航到订单页(复用已登录浏览器会话)
  await edge.goto('https://shop.example.com/user-center/orders');
  await edge.waitNetworkIdle(10000);

  // 2. 探测DOM结构(先探索再定位,打印样本)
  const probe = await edge.JSON.parse(`
    (() => {
      const rows = document.querySelectorAll('[class*="order"]');
      return Array.from(rows).slice(0, 3).map(el => ({
        tag: el.tagName,
        cls: el.className,
        text: el.innerText.slice(0, 80),
      }));
    })()
  `);
  console.log('DOM探测结果:', JSON.stringify(probe, null, 2));

  // 3. 点击「已发货」筛选标签
  await edge.click('[class*="shipped"]');

  // 4. 智能等待网络空闲(替代固定sleep)
  await edge.waitNetworkIdle(8000);

  // 5. 提取订单数据
  const orders = await edge.JSON.parse(`
    (() => {
      const items = document.querySelectorAll('[class*="order-item"]');
      return Array.from(items).map(item => ({
        id: item.querySelector('[class*="order-no"]')?.innerText,
        amount: item.querySelector('[class*="price"]')?.innerText,
        status: item.querySelector('[class*="status"]')?.innerText,
      }));
    })()
  `);
  return orders;
}

scrapeOrderList().then(orders => console.log(orders));

3. 获取HttpOnly Cookie(Node.js)

document.cookie无法读取HttpOnly Cookie,需通过CDP命令获取:

/cdp-automation.js');

async function getHttpOnlyCookies(targetUrl) {
  const cdpSession = await edge.getCdpSession();
  // 通过 Network.getCookies 获取包含 HttpOnly 的完整 Cookie
  const { cookies } = await cdpSession.send('Network.getCookies', {
    urls: [targetUrl],
  });
  // 转为标准 Cookie 头格式
  const cookieHeader = cookies
    .map(c => `${c.name}=${c.value}`)
    .join('; ');
  console.log('Cookie数量:', cookies.length);
  console.log('含HttpOnly:', cookies.filter(c => c.httpOnly).length);
  return cookieHeader;
}

// 示例:获取登录态Cookie用于后续请求
getHttpOnlyCookies('https://shop.example.com').then(header => {
  console.log('Cookie头:', header.slice(0, 60) + '...');
});

4. SPA内部路由导航(Node.js)

直接navigate到SPA子路由会404,需先入父页面再JS点击侧边栏div:

/cdp-automation.js');

async function navigateSpaRoute() {
  // 1. 先入可访问的父页面(非SPA内部子路由)
  await edge.goto('https://app.example.com/user-center/basic-information');
  await edge.waitNetworkIdle(8000);

  // 2. JS点击侧边栏 div 触发内部路由跳转
  await edge.JSON.parse(`
    const nav = document.querySelector('div[cursor-pointer][class*="security"]');
    if (nav) nav.click();
  `);

  // 3. 等待SPA路由切换完成
  await edge.waitNetworkIdle(8000);

  // 4. 截图确认已跳转
  const screenshot = await edge.screenshot();
  return screenshot;
}

navigateSpaRoute().then(() => console.log('SPA导航完成'));

输入定义

参数名类型必填说明
actionstring操作类型: navigate/eval/click/screenshot/get_cookies/connect
urlstring条件必填目标页面URL,navigate/get_cookies时必填
jsstring条件必填JS表达式字符串,eval时必填
selectorstring条件必填CSS选择器,click时必填
browserstring浏览器类型: edge(默认)/chrome
portnumber远程调试端口,Edge默认9222,Chrome默认9223
timeoutnumber最大等待毫秒数,默认10000
input_paramsobject附加配置选项,支持创建/查询/导出操作

返回格式

{
  "success": true,
  "data": {
    "result": "CDP自动化执行结果",
    "execution_time": "1.2s",
    "metadata": {
      "version": "1.0",
      "processor": "cdp-browser-master"
    }
  },
  "execution_log": ["解析输入参数", "连接浏览器调试端口", "执行自动化操作", "提取并格式化结果"],
  "error": null
}

字段说明:

字段类型说明
successboolean处理是否成功,true表示成功,false表示失败
data.resultstring/object自动化执行结果,可能是提取的DOM数据、截图base64或Cookie字符串
data.execution_timestring处理耗时,格式如1.2s
data.metadata.versionstring技能版本号
data.metadata.processorstring处理器标识,固定为cdp-browser-master
execution_logarray执行步骤日志,记录连接、导航、操作、提取各阶段
errorstring/null错误信息,成功时为null,失败时为错误描述(如端口被占用、选择器未找到等)

故障恢复

场景原因处理方式
连接9222失败端口被占或浏览器未启动netstat -ano | findstr :9222查端口,taskkill /F /PID <pid>清残留,重启浏览器
eval返回空值页面未渲染完waitNetworkIdle替代固定sleep,JS密集页面手动加到8-10s
被反爬拦截检测到自动化标记--disable-blink-features=AutomationControlled,行为拟人化,复用已验证会话Cookie
SPA子路由404直接navigate到SPA内部路由先入可访问父页面,再JS点击侧边栏div触发内部路由跳转
Cookie缺失HttpOnly Cookie用document.cookie拿不到用CDP Network.getCookies命令获取

问答合集

Q: 什么时候该用CDP而不是web_fetch? A: JS渲染页面、需登录态、需交互(点击/填表)时用CDP。静态HTML用web_fetch即可。B站等页面web_fetch拿到的是空壳。

Q: 选择器经常失效怎么办? A: 用探测模式——先eval探索DOM结构再定位。提供多备选选择器(从精确class到模糊[class*="未指定"]到语义tag到属性选择器)降级匹配。优先用[class*="未指定"]模糊匹配。

Q: 怎么拿HttpOnly Cookie? A: document.cookie拿不到。用CDP的Network.getCookies命令:cdpSession.send('Network.getCookies', {urls: ['https://目标网站.com']})

能力边界

  1. 依赖本地浏览器环境:需提前安装Edge/Chrome并启动远程调试,无浏览器环境的服务器无法使用
  2. 每端口单连接限制:同一时间每个端口(9222/9223)只能有一个WebSocket连接,多任务需排队或用不同端口
  3. 强反爬站点可能失败:小红书等强反自动化检测站点,即使加反检测策略仍可能被识别
  4. 选择器随网站改版失效:网站更新可能导致选择器失效,需用探测模式重新探索DOM结构
  5. 不适用Headless场景:核心优势是复用已登录浏览器会话,Headless模式失去此优势且更易被检测

安全原则

风险类型防范措施
API密钥泄露使用环境变量管理密钥,禁止硬编码
命令执行风险只运行安全清单内命令,禁止拼接用户输入
网络通信安全通信使用HTTPS并校验证书有效性
敏感数据暴露返回内容不包含敏感凭证

使用前请确认已阅读依赖说明章节,确保运行环境满足安全要求。

性能评估

操作场景手动耗时自动化耗时效率提升
文件解析与提取5-10分钟/个<5秒/个60-120x
批量文件处理(100个)8-16小时<5分钟96-192x
API调用与响应解析2-3分钟/次<1秒/次120-180x
多接口数据聚合15-30分钟<10秒90-180x
命令执行与结果收集3-5分钟/次<2秒/次90-150x
重复任务批量执行因任务而异线性缩减5-50x
错误排查与修复10-30分钟<30秒20-60x

优势对比

对比维度CDP浏览器大师传统手动方式通用脚本工具
自动化程度全流程自动完全手动部分自动
错误处理内置错误恢复依赖人工经验基本try-catch
可复用性参数化配置一次性脚本模板化
安全合规内置安全检查无安全保障无安全保障
适用场景解决反爬检测、选择器易通用场景通用场景

功能介绍

  • 自动化执行: 解决反爬检测、选择器易
  • 文件处理: 支持多种文件格式的读取、解析和写入操作
  • API集成: 通过标准化接口调用外部服务并处理响应
  • 命令执行: 在安全沙箱中执行系统命令并收集结果
  • 信息检索: 快速搜索和过滤目标数据

环境初始化

  1. 配置API密钥: 在环境变量中设置对应的API Key
  2. 初始化连接: 使用提供的凭证建立API连接
  3. 调用接口: 传入必要参数执行API调用
  4. 准备文件: 确认文件路径正确且格式受支持
  5. 执行处理: 调用对应的处理函数
  6. 查看结果: 检查输出文件或返回数据
  7. 检查环境: 确认运行时和依赖已安装
  8. 执行命令: 使用正确的参数格式执行
  9. 查看输出: 检查命令输出和退出码

前置条件

  • 已安装所需运行环境(参考依赖说明)
  • 已获取必要的API密钥或访问凭证(如适用)
  • 输入数据已准备就绪

支持中心

Q1: CDP浏览器大师支持哪些输入格式?

A1: 解决反爬检测、选择器易。支持文本指令和结构化参数输入,具体格式参考使用流程章节。

Q2: 需要配置API Key吗?

A2: 是的,部分功能需要配置对应平台的API Key。请在依赖说明章节查看具体要求,并通过环境变量安全配置。

Q3: 命令行执行失败怎么办?

A3: 检查命令参数是否正确,确认运行环境支持exec能力。如遇权限问题,请参照错误处理章节排查。

异常修复

针对CDP浏览器大师使用中可能遇到的常见问题,提供以下排查方案:

错误类型原因分析解决方案
API认证失败(401)API密钥错误或过期检查密钥配置,重新生成token
接口限流(429)请求频率超出限制降低调用频率,启用重试退避策略
响应超时(504)网络延迟或服务端负载过高增加超时阈值,检查网络连接
文件不存在路径错误或文件未创建检查路径拼写,确认文件已生成
文件格式不支持扩展名不在支持列表中转换为支持的格式后重试
权限不足当前用户无读写权限检查文件权限,以管理员身份运行
命令执行失败参数错误或环境依赖缺失检查命令语法,确认依赖已安装
进程超时命令执行时间过长增加超时设置,优化命令参数
网络连接失败DNS解析失败或防火墙拦截检查网络配置,确认代理设置

CDP浏览器大师通用排查步骤

  1. 检查输入参数: 确认所有必填参数已提供且格式正确
  2. 查看日志输出: 定位具体错误行和异常类型
  3. 验证环境配置: 确认依赖库版本和运行环境满足要求
  4. 逐步调试: 缩小问题范围,隔离故障模块

常见疑问速答

异常恢复流程

针对CDP浏览器大师使用中可能遇到的常见问题,提供以下排查方案:

错误类型原因分析解决方案
API认证失败(401)API密钥错误或过期检查密钥配置,重新生成token
接口限流(429)请求频率超出限制降低调用频率,启用重试退避策略
响应超时(504)网络延迟或服务端负载过高增加超时阈值,检查网络连接
文件不存在路径错误或文件未创建检查路径拼写,确认文件已生成
文件格式不支持扩展名不在支持列表中转换为支持的格式后重试
权限不足当前用户无读写权限检查文件权限,以管理员身份运行
命令执行失败参数错误或环境依赖缺失检查命令语法,确认依赖已安装
进程超时命令执行时间过长增加超时设置,优化命令参数
网络连接失败DNS解析失败或防火墙拦截检查网络配置,确认代理设置

依赖说明

运行环境

  • Agent 平台: 支持SKILL.md的任意AI Agent
  • 操作系统: Windows / macOS / Linux

可用性分类

  • 分类: MD(纯Markdown指令,通过自然语言驱动Agent完成操作)
  • 说明: 基于Markdown的AI Skill,通过自然语言指令驱动Agent完成操作。

Top skills in this category

Playwright (Automation + MCP + Scraper)

@ivangdavila

Automates, tests, and debugs browsers with Playwright: locators, auto-waiting, traces, CI runs, and MCP browser control. Use when a test is flaky, times out, or fails only in CI or headless; when a locator matches multiple elements or the wrong one (strict mode violation); when clicks need force, waits become sleeps, or networkidle never settles; for storageState and login setup, request mocking and HAR replay, uploads and downloads, iframes and shadow DOM, popups and dialogs, screenshot diffs that change per machine, trace and report artifacts, sharding a slow suite, device and permission emulation, accessibility checks, driving a real browser through Playwright MCP, extracting data from JS-rendered pages, or porting a Cypress, Puppeteer, or Selenium suite to Playwright. Not for maintaining an existing Cypress or Puppeteer suite (cypress, puppeteer) or for work a plain HTTP request answers (http).

12941k

Scrapling Official Skill

@d4vinci

Scrape web pages using Scrapling with anti-bot bypass (like Cloudflare Turnstile), stealth headless browsing, spiders framework, adaptive scraping, and JavaScript rendering. Use when asked to scrape, crawl, or extract data from websites; web_fetch fails; the site has anti-bot protections; write Pyth

2814k

Agent Browser Core

@codedao12

OpenClaw skill for the agent-browser CLI (Rust-based with Node.js fallback) enabling AI-friendly web automation with snapshots, refs, and structured commands.

2214k

Polymarket

@mvanhorn

Query and trade on Polymarket prediction markets — check odds, trending markets, search events, view order books, place trades, and manage positions. Now ava...

249.7k

Last30days Skill

@mvanhorn

Research what people actually say about any topic in the last 30 days. Pulls posts and engagement from Reddit, X, YouTube, TikTok, Hacker News, Polymarket, G...

208.6k