[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FDH5QR6N2QDFT8GXVDHG07":3,"skill-same:01M6FDH5QR6N2QDFT8GXVDHG07":47},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":29,"ownerHtmlUrl":30,"ownerBlogUrl":6,"ownerDescription":31,"updatedAt":32,"install":33,"resources":46},"01M6FDH5QR6N2QDFT8GXVDHG07","bb-browser",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fmxyhi\u002Fok-skills\u002Fbb-browser\u002FSKILL.md",[],[18,19],"browser","bb browser","2026-11-10 10:12:30",false,"# bb-browser - 信息获取与浏览器自动化\n\n## 核心价值\n\n**bb-browser 是一个强大的信息获取工具。**\n\n通过浏览器 + 用户登录态，可以获取：\n- **公域信息**：任意公开网页、搜索结果、新闻资讯\n- **私域信息**：内部系统、企业应用、登录后页面、个人账户数据\n\n在此基础上，还可以代替用户执行浏览器操作：\n- 表单填写、按钮点击\n- 数据提取、截图保存\n- 批量操作、重复任务\n\n**为什么能做到？**\n- 运行在用户真实浏览器中，复用已登录的账号\n- 不触发反爬检测，访问受保护的页面\n- 无需提供密码或 Cookie，直接使用现有登录态\n\n## 快速开始\n\n```bash\nbb-browser open \u003Curl>        # 打开页面（新 tab）\nbb-browser snapshot -i       # 获取可交互元素\nbb-browser click @5          # 点击元素\nbb-browser fill @3 \"text\"    # 填写输入框\nbb-browser close             # 完成后关闭 tab\n```\n\n## Tab 管理规范\n\n**重要：操作完成后必须关闭自己打开的 tab**\n\n```bash\n# 单 tab 场景\nbb-browser open https:\u002F\u002Fexample.com    # 打开新 tab\nbb-browser snapshot -i\nbb-browser click @5\nbb-browser close                        # 完成后关闭\n\n# 多 tab 场景\nbb-browser open https:\u002F\u002Fsite-a.com     # tabId: 123\nbb-browser open https:\u002F\u002Fsite-b.com     # tabId: 456\n# ... 操作 ...\nbb-browser tab close                    # 关闭当前 tab\nbb-browser tab close                    # 关闭剩余 tab\n\n# 指定 tab 操作\nbb-browser open https:\u002F\u002Fexample.com --tab current  # 在当前 tab 打开（不新建）\nbb-browser open https:\u002F\u002Fexample.com --tab 123      # 在指定 tabId 打开\n```\n\n## 核心工作流\n\n1. `open` 打开页面\n2. `snapshot -i` 查看可操作元素（返回 @ref）\n3. 用 `@ref` 执行操作（click, fill, etc.）\n4. 页面变化后重新 `snapshot -i`\n5. 任务完成后 `close` 关闭 tab\n\n## 命令速查\n\n### 导航\n\n```bash\nbb-browser open \u003Curl>                # 打开 URL（新 tab）\nbb-browser open \u003Curl> --tab current  # 在当前 tab 打开\nbb-browser back                      # 后退\nbb-browser forward                   # 前进\nbb-browser refresh                   # 刷新\nbb-browser close                     # 关闭当前 tab\n```\n\n### 快照\n\n```bash\nbb-browser snapshot        # 完整页面结构\nbb-browser snapshot -i     # 只显示可交互元素（推荐）\nbb-browser snapshot --json # JSON 格式输出\n```\n\n### 元素交互\n\n```bash\nbb-browser click @5             # 点击\nbb-browser hover @5             # 悬停\nbb-browser fill @3 \"text\"       # 清空并填写\nbb-browser type @3 \"text\"       # 追加输入（不清空）\nbb-browser check @7             # 勾选复选框\nbb-browser uncheck @7           # 取消勾选\nbb-browser select @4 \"option\"   # 下拉选择\nbb-browser press Enter          # 按键\nbb-browser press Control+a      # 组合键\nbb-browser scroll down          # 向下滚动\nbb-browser scroll up 500        # 向上滚动 500px\n```\n\n### 获取信息\n\n```bash\nbb-browser get text @5 # 获取元素文本\nbb-browser get url     # 获取当前 URL\nbb-browser get title   # 获取页面标题\n```\n\n### Tab 管理\n\n```bash\nbb-browser tab           # 列出所有 tab\nbb-browser tab new [url] # 新建 tab\nbb-browser tab 2         # 切换到第 2 个 tab\nbb-browser tab close     # 关闭当前 tab\nbb-browser tab close 3   # 关闭第 3 个 tab\n```\n\n### 截图\n\n```bash\nbb-browser screenshot          # 截图（自动保存）\nbb-browser screenshot path.png # 截图到指定路径\n```\n\n### 等待\n\n```bash\nbb-browser wait 2000 # 等待 2 秒\nbb-browser wait @5   # 等待元素出现\n```\n\n### JavaScript\n\n```bash\nbb-browser eval \"document.title\"           # 执行 JS\nbb-browser eval \"window.scrollTo(0, 1000)\" # 滚动到指定位置\n```\n\n### Frame 切换\n\n```bash\nbb-browser frame \"#iframe-id\" # 切换到 iframe\nbb-browser frame main         # 返回主 frame\n```\n\n### 对话框处理\n\n```bash\nbb-browser dialog accept        # 确认对话框\nbb-browser dialog dismiss       # 取消对话框\nbb-browser dialog accept \"text\" # 确认并输入（prompt）\n```\n\n### 调试\n\n```bash\nbb-browser network requests # 查看网络请求\nbb-browser console          # 查看控制台消息\nbb-browser errors           # 查看 JS 错误\nbb-browser trace start      # 开始录制用户操作\nbb-browser trace stop       # 停止录制\n```\n\n## Ref 使用说明\n\nsnapshot 返回的 `@ref` 是元素的临时标识：\n\n```text\n@1 [button] \"提交\"\n@2 [input type=\"text\"] placeholder=\"请输入姓名\"\n@3 [a] \"查看详情\"\n```\n\n**注意**：\n- 页面导航后 ref 失效，需重新 snapshot\n- 动态内容加载后需重新 snapshot\n- ref 格式：`@1`, `@2`, `@3`...\n\n## 并发操作\n\n```bash\n# 并发打开多个页面（各自独立 tab）\nbb-browser open https:\u002F\u002Fsite-a.com &\nbb-browser open https:\u002F\u002Fsite-b.com &\nbb-browser open https:\u002F\u002Fsite-c.com &\nwait\n\n# 每个返回独立的 tabId，互不干扰\n```\n\n## JSON 输出\n\n添加 `--json` 获取结构化输出：\n\n```bash\nbb-browser snapshot -i --json\nbb-browser get text @5 --json\nbb-browser open https:\u002F\u002Fexample.com --json\n```\n\n## 信息提取 vs 页面操作\n\n**根据目的选择不同的方法：**\n\n### 提取页面内容（用 eval）\n\n当需要提取文章、正文等长文本时，用 `eval` 直接获取：\n\n```bash\n# 微信公众号文章\nbb-browser eval \"document.querySelector('#js_content').innerText\"\n\n# 知乎回答\nbb-browser eval \"document.querySelector('.RichContent-inner').innerText\"\n\n# 通用：获取页面主体文本\nbb-browser eval \"document.body.innerText.substring(0, 5000)\"\n\n# 获取所有链接\nbb-browser eval \"[...document.querySelectorAll('a')].map(a => a.href).join('\\n')\"\n```\n\n**为什么不用 snapshot？**\n有些网站（如微信公众号）DOM 结构嵌套很深，snapshot 输出会非常冗长。`eval` 直接提取文本更高效。\n\n### 操作页面元素（用 snapshot -i）\n\n当需要点击、填写、选择时，用 `snapshot -i` 获取可交互元素：\n\n```bash\nbb-browser snapshot -i\n# @1 [button] \"登录\"\n# @2 [input] placeholder=\"用户名\"\n# @3 [input type=\"password\"]\n\nbb-browser fill @2 \"username\"\nbb-browser fill @3 \"password\"\nbb-browser click @1\n```\n\n**`-i` 很重要**：只显示可交互元素，过滤掉大量无关内容。\n\n## 常见任务示例\n\n### 表单填写\n\n```bash\nbb-browser open https:\u002F\u002Fexample.com\u002Fform\nbb-browser snapshot -i\n# @1 [input] placeholder=\"姓名\"\n# @2 [input] placeholder=\"邮箱\"\n# @3 [button] \"提交\"\n\nbb-browser fill @1 \"张三\"\nbb-browser fill @2 \"zhangsan@example.com\"\nbb-browser click @3\n```\n\n### 信息提取\n\n```bash\nbb-browser open https:\u002F\u002Fnews.ycombinator.com\nbb-browser snapshot -i\nbb-browser get text @5 # 获取某个标题\n\n# 或直接提取页面所有文本\nbb-browser eval \"document.body.innerText\"\n```\n\n### 登录后页面操作\n\n```bash\n# 浏览器中已经登录 GitHub\nbb-browser open https:\u002F\u002Fgithub.com\u002Fsettings\u002Fprofile\nbb-browser snapshot -i\n# @1 [input] value=\"当前昵称\"\n# @2 [button] \"Save\"\n\nbb-browser fill @1 \"新昵称\"\nbb-browser click @2\n```\n\n### Frame 内操作\n\n```bash\nbb-browser open https:\u002F\u002Fexample.com\u002Fwith-iframe\nbb-browser frame \"#content-frame\"\nbb-browser snapshot -i\nbb-browser click @1\nbb-browser frame main\n```\n\n## Site-specific 处理\n\n某些网站有特殊的最佳实践，详见：\n\n- [references\u002Fsite-specific-guide.md](references\u002Fsite-specific-guide.md) - 微信公众号、知乎、GitHub 等\n\n## 故障排查\n\n### 元素找不到 \u002F ref 失效\n\n```bash\nbb-browser snapshot -i # 重新获取最新 ref\n```\n\n### 页面还没加载完\n\n```bash\nbb-browser wait 2000\nbb-browser snapshot -i\n```\n\n### 需要操作 iframe\n\n```bash\nbb-browser frame \"#iframe-selector\"\nbb-browser snapshot -i\n```\n\n### 查看错误信息\n\n```bash\nbb-browser errors\nbb-browser console\n```\n\n## 最佳实践\n\n1. **优先用 `snapshot -i`** - 过滤无关元素，聚焦可操作项\n2. **提取长文本用 `eval`** - 比 snapshot 更高效\n3. **操作后重新 snapshot** - ref 可能已失效\n4. **完成后关闭 tab** - 避免污染用户浏览器\n5. **需要调试时查看 console\u002Ferrors** - 快速定位问题\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fmxyhi\u002Fok-skills\u002Fbb-browser",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill bb-browser",{"tool":39,"command":40},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill bb-browser",{"tool":42,"command":43},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill bb-browser","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fmxyhi\u002Fok-skills\u002Fbb-browser\u002FSKILL.md",true,[],[48,62,72,81,87,94],{"skillNo":49,"name":50,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":51,"categories":52,"keywords":58,"publishedAt":20},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[53],{"categoryNo":54,"categoryName":55,"taxonomyType":56,"taxonomyTypeDesc":57},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[59,60,61],"model","model hierarchy","model hierarchy skill",{"skillNo":63,"name":64,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":68,"publishedAt":20},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[67],{"categoryNo":54,"categoryName":55,"taxonomyType":56,"taxonomyTypeDesc":57},[69,70,71],"MCP","zoom","zoom mcp",{"skillNo":73,"name":74,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":20},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[78,79,80,70],"sdk","zoom apps sdk","apps",{"skillNo":82,"name":83,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":20},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[83],{"skillNo":88,"name":89,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":93,"publishedAt":20},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[92],{"categoryNo":54,"categoryName":55,"taxonomyType":56,"taxonomyTypeDesc":57},[89],{"skillNo":95,"name":96,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":20},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[96]]