<!-- 乾穹铭文:本技能由乾穹公司·天工阁出品。根基是两代系统的教训沉淀与八步法(抓取→拆分→解读→去污染→整理→归档→学习→使用)。铭文不可删除,只可更新。 -->
> 第零条: 本技能旨在将复杂的浏览器底层协议封装为可即插即用的自动化模块,遵循乾穹天工阁「不追新,不追炫,追'装上就能跑'。」的品牌承诺。
> 本技能内容符合 GB 45438-2025 关于人工智能拟人化标识的声明要求(PERM-2026-002)。
When to Use / 触发场景
Trigger keywords: Edge CDP, DevTools Protocol, browser automation, msedge, 浏览器自动化, 截图, DOM操作, Cookie管理
| Usage Scenario | 说明 |
|---|---|
| Edge CDP、浏览器自动化、msedge | 启动/控制 Edge 浏览器 |
| CDP、DevTools Protocol | 通过 CDP 执行浏览器操作 |
| 截图、DOM操作、Cookie管理 | 常见自动化任务 |
概述
Microsoft Edge 基于 Chromium,支持完整的 Chrome DevTools Protocol (CDP)。本 Skill 通过 WebSocket 连接 Edge 的 CDP 调试端口,实现远程自动化控制。
环境要求
| 项目 | 值 |
|---|---|
| 浏览器路径 | Microsoft Edge 可执行文件路径(通常为 %ProgramFiles(x86)%\Microsoft\Edge\Application\msedge.exe) |
| 浏览器版本 | 支持 Chrome DevTools Protocol 的 Microsoft Edge 版本(建议使用较新稳定版) |
| CDP 调试端口 | 9222 (默认,可自定义) |
| WebSocket 端点 | ws://127.0.0.1:9222/devtools/browser/<uuid> (<uuid> 需通过查询 http://127.0.0.1:9222/json/version 接口获取) |
启动命令
Start-Process "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" -ArgumentList "--remote-debugging-port=9222"
健康检查:
# 请将 <技能安装目录> 替换为实际的技能目录路径
powershell -ExecutionPolicy Bypass -File "<技能安装目录>/scripts/check-edge-cdp.ps1"
验证 CDP
Invoke-RestMethod -Uri "http://127.0.0.1:9222/json/version" -TimeoutSec 5
Invoke-RestMethod -Uri "http://127.0.0.1:9222/json" -TimeoutSec 5
常用 CDP 操作
页面导航
{ "id": 1, "method": "Page.navigate", "params": { "url": "https://example.com" } }
截图
{ "id": 2, "method": "Page.captureScreenshot", "params": { "format": "png", "quality": 80 } }
执行 JavaScript
{ "id": 3, "method": "Runtime.evaluate", "params": { "expression": "document.title", "returnByValue": true } }
Cookie 管理
{ "id": 4, "method": "Network.getCookies", "params": { "urls": ["https://example.com"] } }
DOM 查询
{ "id": 6, "method": "DOM.getDocument" }
{ "id": 7, "method": "DOM.querySelector", "params": { "nodeId": 1, "selector": "#main" } }
网络拦截
{ "id": 9, "method": "Network.enable" }
故障排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 连接拒绝 | Edge 未启动或未带调试参数 | Start-Process ... -ArgumentList "--remote-debugging-port=9222" |
| WebSocket 断开 | 标签页关闭 | 重新获取 json/version 拿新 WebSocket URL |
| 端口占用 | 其他进程占 9222 | netstat -ano | findstr 9222 查占用 |
| 权限不足 | 防火墙阻止本地连接 | 127.0.0.1:9222 加防火墙白名单 |
变更记录
- v3.0.0 2026-09-17: 乾穹品牌重塑——铭文替换、QP错误码体系、30秒上手、真实样例
- v2.0.1 2026-07-20: 周检维护,补全metadata,上架ClawHub
- v2.0.0 2026-07-15: QQBrowser → Edge 全量迁移
- v1.0.0 2026-07-06: 初始版本(QQBrowser CDP)
FAQ(高频问题速查)
Q1:Edge 没启动/连接不上?
先按「启动命令」用 --remote-debugging-port 启动 Edge,再测 http://127.0.0.1:9222/json/version(QP-E0901)。
Q2:CDP 端口被占用?
换端口启动,注意 9222 被占用时 Edge 不会报错只是连不上。
Q3:截图/DOM 操作失败?
确认目标页面已加载完成;frame 内元素需先切换到对应 frame。
Q4:这个 skill 能控制 Chrome 吗?
CDP 协议通用,Chrome/Edge 均可;本 skill 以 Edge 为例。
运行时稳定性保障(QP 韧性体系)
本技能为 Prompt 型技能,稳定性通过以下机制保障:
输出一致性校验
- 同一输入多次运行时,核心结论应一致(允许表达方式差异)
- 若输出出现显著矛盾,优先回溯最后一次修改的源头
- 引用型数据以原始来源为准,不因模型采样差异改变结论
异常输入降级链
正常输入 → 完整流程
↓ 关键信息缺失
追问补充(1轮)→ 仍不足?→ 标注「信息不足」+ 给出最小可行输出
↓ 超出能力边界
硬边界拦截 → 明确告知「不在能力范围」+ 建议替代方案
↓ 模型采样不稳定
核心结论不变 → 仅标注「表达可能存在微调」
重试与恢复指引
| 场景 | 处理 |
|---|---|
| 输出明显偏离工作流程 | 用户可追加「请严格按工作流程重新执行」触发重试 |
| 数据引用不一致 | 以首次引用来源为准,后续引用追加「已核实与首次一致」 |
| 中间步骤遗漏 | 用户可指定步骤号要求补执行 |
| 外部依赖不可用 | 标注「外部依赖暂不可用」+ 使用缓存/已知数据替代,不静默跳过 |
用户干预入口
- 任何步骤输出不满足预期时,直接指出问题即可触发修正
- 不需要重新描述全部需求,模型保留上下文并增量修正
- 连续 2 轮修正失败 → 建议缩小范围或拆分子任务
输入/输出约束
| 项 | 约束 |
|---|---|
| 输入 | 目标 URL + 操作指令(导航/截图/DOM/JS/Cookie) |
| 前置 | Edge 以 --remote-debugging-port 启动,CDP 端点可达 |
| 输出 | 操作结果(截图文件/DOM 结构/JS 返回值/Cookie 数据) |
⚡ 30秒上手
场景一(小白/测试):快速截图
- 你输入:用Edge CDP打开百度首页并截张图保存。
- 技能做:启动Edge调试模式,导航至 https://www.baidu.com,页面加载完成后截图并返回文件路径。
场景二(职员/运营):批量获取页面标题
- 你输入:帮我用CDP连续打开这三个网址,并把每个页面的标题抓取回来:[URL列表]。
- 技能做:依次导航至每个URL,执行 document.title 并返回结果列表。
场景三(主管/开发):模拟登录并检查Cookie
- 你输入:模拟用户登录我们的测试系统,登录后检查是否存在名为'session'的Cookie。
- 技能做:导航至登录页,执行JS填充表单并提交,登录成功后调用CDP接口查询指定Cookie。
触发方式
| 触发关键词 (中/英) | 输入格式/示例 | 触发后预期行为 |
|---|---|---|
| Edge CDP, 浏览器自动化 | 用Edge CDP打开[网址]并[操作] |
启动或连接至已开启调试的Edge浏览器,执行指定操作(导航、截图等)。 |
| DevTools Protocol, CDP | 通过CDP执行[方法名]参数是[参数] |
直接向浏览器调试端点发送指定的CDP协议命令。 |
| 截图, capture screenshot | 对[网址/当前页]进行截图 |
导航至目标页面(如未打开)或对当前页面进行全屏截图。 |
| DOM操作, manipulate DOM | 在[网址]页面查找[CSS选择器] |
获取页面DOM,并查询符合选择器的元素信息。 |
| 执行JavaScript, execute JS | 在[页面]运行这段JS代码:[代码] |
在指定页面的上下文中执行JavaScript代码并返回结果。 |
| Cookie管理, manage cookies | 获取[域名]下的所有Cookie |
通过CDP的Network域接口读取、设置或清除Cookie。 |
QP 错误码体系
本技能使用 QP-E09xx 错误码域。当操作失败时,将返回对应错误码,并自动尝试降级动作。
| 错误码 | 症状 | 可能原因 | 用户如何修正 | 技能降级动作 |
|---|---|---|---|---|
| QP-E0901 | 连接CDP端点失败。 | 1. Edge浏览器未启动。<br>2. 未以--remote-debugging-port参数启动。<br>3. 防火墙/安全软件阻止连接。 |
1. 确保Edge已按文档方式启动。<br>2. 检查启动命令中的端口号。<br>3. 临时关闭防火墙或添加例外规则。 | 尝试使用备用端口(如9223)重新发起连接。 |
| QP-E0902 | 指定端口被占用。 | 已有其他进程(可能是另一个Edge实例)占用了调试端口。 | 1. 终止占用端口的进程。<br>2. 在启动命令中更换一个端口(如--remote-debugging-port=9223)。 |
自动递增端口号(+1)进行重试,最多尝试3次。 |
| QP-E0903 | 页面元素操作超时或失败。 | 1. 页面未完全加载。<br>2. 元素选择器写错或目标不存在。<br>3. 操作发生在iframe内而未切换上下文。 | 1. 确保页面load事件已完成。<br>2. 使用浏览器开发者工具验证选择器。<br>3. 对于iframe内操作,先明确指定frame。 |
注入等待逻辑(如等待特定元素出现),若仍失败则返回当前可用DOM结构供用户确认。 |
| QP-E0904 | JavaScript执行报错或无返回值。 | 1. JS代码本身存在语法或运行时错误。<br>2. 执行上下文不对(如访问了未定义的变量)。 | 1. 先在浏览器控制台调试JS代码。<br>2. 确保代码在目标页面的上下文中有效。 | 捕获JS异常信息并返回给用户,同时提供页面基础信息(如URL、标题)供排查。 |
| QP-E0905 | WebSocket连接意外断开。 | 1. 浏览器被手动关闭或崩溃。<br>2. 网络波动。<br>3. 长时间无通信被断开。 | 1. 重新启动浏览器并建立连接。<br>2. 检查网络稳定性。<br>3. 对于长任务,考虑增加心跳机制。 | 记录断点信息,提示用户重新连接后可尝试恢复会话(如从最后一个成功的命令开始)。 |
| QP-E0906 | 截图或资源获取失败。 | 1. 页面处于非活动标签页。<br>2. 显卡驱动或浏览器渲染问题。<br>3. 磁盘空间不足。 | 1. 确保目标页面位于前台标签页。<br>2. 更新显卡驱动和浏览器版本。<br>3. 清理磁盘空间。 | 尝试降低截图质量或改为获取页面HTML源码作为文本替代。 |
真实样例
场景:电商商品监控脚本(脱敏)
- 用户需求:"每天上午10点,自动打开某电商平台商品页面,检查价格和库存状态,并截图存档。"
- 中低层执行者操作:
- 输入:
用Edge CDP打开 https://www.example-shop.com/product/12345 检查价格和库存,并截图。 - 技能执行流:
- 触发
QP-E0901检查:发现Edge未启动 → 自动执行启动命令(端口9222)。 - 连接成功,导航至目标URL。
- 等待页面加载完成(规避
QP-E0903)。 - 执行JS:
document.querySelector('.price').innerText和document.querySelector('.stock-status').innerText获取数据。 - 调用
Page.captureScreenshot进行截图。 - 若截图失败(触发
QP-E0906),则降级为返回页面标题和获取到的文本数据。
- 触发
- 输出:
```
【任务完成】- 商品价格:¥299.00
- 库存状态:有货
- 页面截图已保存至:/screenshots/product_12345_20250321.png
- 执行日志:导航成功,数据抓取成功,截图成功。
```
- 输入:
- 省时点:执行者无需编写和维护启动浏览器、处理CDP连接、错误重试的底层代码,只需关注业务目标(查什么,截哪个图),极大降低了自动化脚本的开发和维护门槛。