mcpField
C
chrome-debug

chrome-debug

github.com/zenobi-us测试与质量6864 次安装今天更新
代码仓库

关于 chrome-debug

chrome-debug 是一项技能,通过 mcporter 使用 Chrome DevTools Protocol 调试和操作浏览器。它指导 Agent 检查页面、执行交互、截图和诊断,并要求通过 UID 选择页面元素。

主要功能

  1. 01查看并选择浏览器标签页
  2. 02导航并操作页面
  3. 03截取屏幕截图和 DOM 快照
  4. 04检查控制台日志与网络请求
  5. 05执行 JavaScript 和性能跟踪

适用场景

  1. 01测试浏览器中的表单交互
  2. 02排查页面错误和失败请求
  3. 03截取屏幕截图以进行视觉验证

MCP 相关

通过 mcporter 调用 chrome-devtools MCP 服务,使用其浏览器页面控制、检查、交互和诊断工具。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/zenobi-us/dotfiles --skill chrome-debug

安装后在 Claude Code 中输入/chrome-debug确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

reference/
troubleshooting.md
workflows-debugging.md
workflows-element-interaction.md
workflows-form-filling.md
workflows-navigation.md
workflows-performance.md
workflows-screenshots.md

详细介绍

通过远程调试协议进行 Chrome 调试和浏览器操作

概述

Chrome DevTools 协议(CDP)可通过 mcporter 实现远程浏览器自动化和调试。

主要功能:

  • 在与 Agent 对话的同时实时调试浏览器
  • 自动填写表单并测试交互
  • 通过屏幕截图提供视觉反馈
  • 检查控制台日志和网络请求
  • 在页面上下文中执行 JavaScript

前置条件 [CRITICAL]

使用 Chrome DevTools 前,请确保:

  1. Chrome/Chromium 已运行并启用远程调试
  2. 浏览器正在监听 9222 端口(默认端口)
  3. 使用以下命令测试连接:
mise x node@20 -- mcporter call chrome-devtools.list_pages

如果失败:

  • 启动 Chrome:google-chrome --remote-debugging-port=9222
  • 确认没有其他进程占用 9222 端口
  • 请他人协助设置浏览器

可用工具

工具用途
list_pages列出所有打开的页面/标签页
select_page选择要操作的特定页面/标签页
new_page创建新的浏览器页面/标签页
close_page关闭浏览器页面/标签页
navigate_page跳转至 URL、后退、前进或重新加载
take_snapshot获取 DOM 快照以供检查(返回 UID)
take_screenshot截取当前页面的屏幕截图
click点击页面上的元素
fill在输入框中填写文本
hover将鼠标悬停在元素上
press_key按下键盘按键(Enter、Tab、Escape 等)
evaluate_script在页面上下文中执行 JavaScript 代码
wait_for等待元素、导航或特定条件
list_console_messages获取所有控制台消息(日志、错误、警告)
list_network_requests获取页面发出的所有网络请求
emulate模拟设备设置(网络、CPU 限速)
resize_page调整浏览器视口大小
performance_start_trace开始性能跟踪
performance_stop_trace停止性能跟踪并获取结果

提示

获取完整工具列表:mcporter list chrome-devtools --json | jq -r '.tools[] | [.name, .description] | @tsv' | column -t -s $'\t'

核心概念

1. 页面选择模型
  • Chrome DevTools 可操作多个页面/标签页
  • 使用 list_pages 查看所有打开的页面
  • 使用 select_page 选择要操作的页面
  • 后续所有命令都将作用于所选页面
2. 基于 UID 的元素模型 [CRITICAL]
  • 无法直接使用 CSS 选择器与元素交互
  • 必须先调用 take_snapshot 获取带 UID 的无障碍树
  • UID 是元素的临时标识符(例如 “5”、“12”、“42”)
  • UID 会在导航时失效——导航后请获取新快照
3. 必须使用 JSON 参数
  • 所有 mcporter 命令都必须使用包含 JSON 对象的 --args
  • 属性名称采用 camelCase(例如 filePath、fullPage、pageIdx)
  • 切勿使用 --file-path 或 --full-page 等单独的标志
4. 基于函数的脚本求值
  • evaluate_script 需要函数声明,不能是普通代码
  • 返回值必须可序列化为 JSON
  • 可通过带 UID 的 args 数组传入元素参数

快速参考

便于在 bash 中使用的基本命令:

# List and select page
mise x node@20 -- mcporter call chrome-devtools.list_pages
mise x node@20 -- mcporter call chrome-devtools.select_page --args '{"pageIdx":0}'

# Take snapshot to get UIDs
mise x node@20 -- mcporter call chrome-devtools.take_snapshot

# Take screenshot
mise x node@20 -- mcporter call chrome-devtools.take_screenshot --args '{"filePath":"./screen.png"}'

# Take full-page screenshot
mise x node@20 -- mcporter call chrome-devtools.take_screenshot --args '{"filePath":"./full.png","fullPage":true}'

# Navigate to URL
mise x node@20 -- mcporter call chrome-devtools.navigate_page --args '{"type":"url","url":"http://localhost:3000"}'

# Navigate back/forward/reload
mise x node@20 -- mcporter call chrome-devtools.navigate_page --args '{"type":"back"}'
mise x node@20 -- mcporter call chrome-devtools.navigate_page --args '{"type":"reload"}'

# Click element (requires UID from snapshot)
mise x node@20 -- mcporter call chrome-devtools.click --args '{"uid":"12"}'

# Fill input field
mise x node@20 -- mcporter call chrome-devtools.fill --args '{"uid":"5","value":"[email protected]"}'

# Hover element
mise x node@20 -- mcporter call chrome-devtools.hover --args '{"uid":"8"}'

# Press key
mise x node@20 -- mcporter call chrome-devtools.press_key --args '{"key":"Enter"}'

# Run JavaScript
mise x node@20 -- mcporter call chrome-devtools.evaluate_script --args '{"function":"() => { return document.title }"}'

# Run JS with element argument
mise x node@20 -- mcporter call chrome-devtools.evaluate_script --args '{"function":"(el) => { return el.innerText }","args":[{"uid":"12"}]}'

# List console messages
mise x node@20 -- mcporter call chrome-devtools.list_console_messages

# List only errors
mise x node@20 -- mcporter call chrome-devtools.list_console_messages --args '{"types":["error"]}'

# List network requests
mise x node@20 -- mcporter call chrome-devtools.list_network_requests

# Filter network by type
mise x node@20 -- mcporter call chrome-devtools.list_network_requests --args '{"types":["fetch","xhr"]}'

# Wait for text to appear
mise x node@20 -- mcporter call chrome-devtools.wait_for --args '{"text":"Success"}'

# Emulate network conditions
mise x node@20 -- mcporter call chrome-devtools.emulate --args '{"networkConditions":"Slow 3G"}'

常见工作流

基本元素交互
# 1. Select page and take snapshot
mise x node@20 -- mcporter call chrome-devtools.list_pages
mise x node@20 -- mcporter call chrome-devtools.select_page --args '{"pageIdx":0}'
SNAPSHOT=$(mise x node@20 -- mcporter call chrome-devtools.take_snapshot)
echo "$SNAPSHOT"

# 2. Find element UID in snapshot output
# Example: uid=12 input type="email"

# 3. Interact with element using its UID
mise x node@20 -- mcporter call chrome-devtools.fill --args '{"uid":"12","value":"[email protected]"}'
mise x node@20 -- mcporter call chrome-devtools.click --args '{"uid":"15"}'
屏幕截图工作流
# Take viewport screenshot
mise x node@20 -- mcporter call chrome-devtools.take_screenshot --args '{"filePath":"./screen.png"}'

# Take full-page screenshot
mise x node@20 -- mcporter call chrome-devtools.take_screenshot --args '{"filePath":"./full.png","fullPage":true}'

# Screenshot specific element
mise x node@20 -- mcporter call chrome-devtools.take_screenshot --args '{"uid":"20","filePath":"./button.png"}'
调试 JavaScript 错误
# Check console for errors
mise x node@20 -- mcporter call chrome-devtools.list_console_messages --args '{"types":["error","warn"]}'

# Check network requests
mise x node@20 -- mcporter call chrome-devtools.list_network_requests --args '{"types":["fetch","xhr"]}'
运行性能测试
# Execute JavaScript to get performance metrics
mise x node@20 -- mcporter call chrome-devtools.evaluate_script \
  --args '{"function":"() => { const perf = performance.getEntriesByType(\"navigation\")[0]; return { loadTime: perf.loadEventEnd - perf.fetchStart, domInteractive: perf.domInteractive - perf.fetchStart }; }"}'

重要提醒

必须遵循 UID 工作流
# ❌ WRONG - CSS selectors don't work
mise x node@20 -- mcporter call chrome-devtools.click --selector "#login-button"

# ✅ CORRECT - Use UIDs from snapshot
mise x node@20 -- mcporter call chrome-devtools.take_snapshot  # Get UIDs first
mise x node@20 -- mcporter call chrome-devtools.click --args '{"uid":"12"}'
UID 会在导航时过期
# After navigation, UIDs are invalid
mise x node@20 -- mcporter call chrome-devtools.navigate_page --args '{"type":"url","url":"..."}'

# Take fresh snapshot to get new UIDs
mise x node@20 -- mcporter call chrome-devtools.take_snapshot
始终使用带 JSON 的 --args
# ❌ WRONG - Individual flags don't work
mise x node@20 -- mcporter call chrome-devtools.take_screenshot --file-path "./screen.png"

# ✅ CORRECT - Use --args with JSON
mise x node@20 -- mcporter call chrome-devtools.take_screenshot --args '{"filePath":"./screen.png"}'

快速故障排查

错误解决方案
"Element not found" / "Invalid UID"获取新快照:take_snapshot
"No page selected"选择页面:select_page --args '{"pageIdx":0}'
"Connection refused"启动 Chrome:google-chrome --remote-debugging-port=9222
未创建屏幕截图确保目录存在,并使用 --args 格式
UID 无法使用UID 在导航后已过期——获取新快照

补充资源

根据需要延迟加载这些参考资料:

参考资料使用时机
元素交互使用 UID、点击、悬停或测量元素时
表单填写填写表单、提交数据或处理键盘输入时
屏幕截图截取屏幕截图、进行视觉测试或记录状态时
性能测量页面性能、网络计时或模拟条件时
调试排查控制台错误、网络故障或脚本执行问题时
导航浏览页面、管理标签页或处理视口时
故障排除遇到错误或异常行为时

重要

仅在需要时加载参考资料——不要预先阅读所有文件。请阅读与当前任务对应的特定参考资料。

实际影响

集成 Chrome DevTools Protocol 后,你可以:

  • 在与 Agent 对话的同时实时调试浏览器
  • 自动填写表单并进行交互测试
  • 获得有关应用行为的视觉反馈
  • 通过控制台日志立即诊断错误
  • 基于屏幕截图执行验证工作流

如果没有这项集成,调试 Web 应用就需要不断在浏览器和 Agent 之间切换上下文。

评论

支持 Markdown