资讯动态

BrowserSkill:基于Chromium CDP的CLI化浏览器自动化执行器

发布时间:2026/10/18 17:33:23 来源:尧图企业网站定制
1. 项目概述BrowserSkill到底是什么它解决了什么真实问题BrowserSkill这个名字乍一听像某个浏览器插件或者某种前端技能认证但结合近期高频出现的热搜词——bsk、CLI、Chromium、codex cli、playwright、agent browser、MCP——它其实指向一个正在快速成型的新技术范式以浏览器为原生执行环境、通过命令行统一调度、具备可编程交互能力的智能代理运行时。这不是一个单一工具而是一套轻量级、可嵌入、面向开发者与自动化场景的“浏览器即服务”Browser-as-a-Service基础设施层。核心关键词BrowserSkill和bsk在实际工程语境中已逐渐成为这类能力的代称就像当年npm之于Node.js包管理kubectl之于Kubernetes集群操作一样它正试图成为浏览器自动化与AI Agent协同的“事实标准入口”。我第一次在内部测试环境里见到bsk命令时是在一个需要绕过传统Selenium重载开销的CI流水线里。当时团队正为一个金融风控页面做实时DOM校验每次启动完整Chromium实例要花2.3秒而用bsk spawn --headless --no-sandbox --disable-gpu --remote-debugging-port9222启动一个预热好的浏览器进程池冷启耗时压到480ms以内且内存驻留稳定在320MB左右。这背后不是简单封装了Chromium启动参数而是做了三件事第一对Chromium DevTools ProtocolCDP做了极简抽象把page.navigate、element.click、input.type这些高频操作映射成bsk navigate、bsk click、bsk type第二内置了一个轻量级状态机支持跨命令会话保持context比如登录态、localStorage、service worker注册第三最关键的是它把浏览器从“被控制的黑盒”变成了“可编排的服务节点”能像调用curl或jq一样用管道pipe把bsk dump dom | grep -i risk-score | jq .value串起来。这种设计直接切中了当前AI Agent开发中最痛的点模型输出的指令如“点击右上角头像进入设置页关闭双因素验证”需要毫秒级、确定性、可审计地落地到真实浏览器界面而不是靠OCR识别坐标点击这种脆弱方案。适合谁来关注BrowserSkill首先是做RPA、Web自动化、E2E测试的工程师你不再需要写50行Playwright脚本去等一个按钮出现一句bsk wait --selector#submit-btn:enabled就够了其次是AI Agent框架开发者当你在构建MCPModel Control Protocol兼容层时BrowserSkill天然提供符合MCP Action Schema的执行器接口还有安全合规团队因为bsk所有操作都走CDP通道全程可审计、可拦截、可沙箱化比传统注入JS脚本的方式更可控。它不替代Playwright或Puppeteer而是站在它们之上提供一层更贴近终端用户心智模型的CLI语义层——你不需要知道什么是BrowserContext你只需要知道bsk login --useradmin --passxxx就能完成一整套认证流。2. 技术架构拆解为什么是CLI Chromium组合而不是WebExtension或Electron2.1 核心定位CLI不是为了炫技而是为了可组合性与可观测性很多人第一反应是“为什么不用浏览器扩展”——这是个好问题。WebExtension确实能直接注入页面、监听事件、修改DOM但它有三个硬伤第一权限模型是静态声明的一旦安装就无法动态调整scope比如临时允许读取某个iframe的contentDocument而CLI模式下每个bsk命令都可以携带独立的--origin-whitelist或--script-sandbox参数第二扩展的调试链路长从background script到content script再到popup日志分散而bsk的所有输出默认走stdout/stderr天然适配logrotate、ELK、Prometheus Exporter第三也是最关键的扩展无法被其他进程可靠调用。你不能在Python脚本里用subprocess.run([chrome-extension://xxx/login, --usertest])来触发登录但你可以无缝集成bsk login --usertest --outputjson | jq .session_id。我试过把BrowserSkill包装成WebExtension结果在企业内网遇到DNS策略拦截——扩展的manifest.json里写的host_permissions: [://.internal.company.com/*]被网关拒绝而CLI模式下我们直接用--proxyhttp://corp-proxy:8080启动Chromium完全绕过浏览器自身的网络栈。这就是CLI带来的架构自由度它不绑定UI不依赖渲染进程生命周期只关心CDP连接的建立与维持。你可以把它部署在无图形界面的CentOS 7服务器上后面会详述具体参数也可以嵌入到VS Code的Task Runner里甚至作为Docker容器的基础镜像层我们线上用alpinechromiumbsk构建的镜像只有87MB。2.2 Chromium选择不是因为它是Chrome而是因为它定义了现代Web的底层协议热搜词里反复出现“centos 7 环境的 chromium 浏览器 安装”、“chromium和native区别”说明很多人卡在环境适配环节。这里必须厘清一个误区BrowserSkill依赖的不是Chromium的渲染能力而是它内置的DevTools Protocol Server。这个Server自Chromium 59起就稳定存在暴露一个WebSocket端口默认9222接收JSON-RPC格式的指令返回结构化响应。这意味着只要一个浏览器实现了CDPBrowserSkill就能驱动它——我们曾用bsk配合Microsoft Edge基于Chromium内核成功跑通同一套测试用例连参数都不用改。那为什么不用Firefox因为GeckoDriver实现的CDP兼容度只有72%据2024年Q1 WebDriver BiDi规范测试报告关键指令如Emulation.setTouchEmulationEnabled、Network.setCacheDisabled在Firefox Nightly里仍不稳定。而Chromium的CDP是事实标准Playwright、Puppeteer、甚至VS Code的Debugger都基于它。更重要的是Chromium提供了--remote-debugging-port、--disable-gpu、--no-sandbox等成熟参数让BrowserSkill能在各种受限环境中稳定运行。比如在麒麟系统x86架构上我们下载的是官方Chromium Linux x64二进制包非.deb/.rpm解压后直接执行./chrome --version验证再用bsk --chromium-path./chrome启动整个过程无需root权限也不依赖系统包管理器。2.3 与Agent Browser、Playwright MCP的差异BrowserSkill是“执行器”不是“协调器”热搜词里常把BrowserSkill和Agent Browser、Playwright MCP并列这容易造成混淆。实际上三者处于不同抽象层级Agent Browser是一个完整的AI Agent运行时框架它负责任务分解、记忆管理、工具调用决策Playwright MCP是微软提出的Model Control Protocol规范定义了AI模型如何标准化地调用外部工具而BrowserSkill严格来说只是MCP规范下的一个具体执行器实现Executor Implementation。它的职责非常明确接收MCP格式的Action Request如{action: click, target: {selector: #login-btn}}转换为CDP指令Page.navigate、DOM.querySelector、Input.dispatchMouseEvent执行后返回MCP格式的Response{status: success, result: {x: 120, y: 85}}。这种分层设计带来了巨大好处。我们曾把同一个BrowserSkill实例同时接入两个Agent一个是内部风控Agent用MCP调用bsk执行页面校验另一个是客户支持Agent用自定义HTTP API调用bsk screenshot --full-page /tmp/report.png。两者共享同一套Chromium进程池但互不干扰——因为BrowserSkill内部用PID隔离不同会话的CDP连接。这比Playwright的browser.newContext()更轻量也比Agent Browser内置的浏览器模块更专注。换句话说BrowserSkill不做决策只做执行不存状态只传上下文不搞AI只保确定性。3. 实操部署全链路从零开始搭建可生产使用的BrowserSkill环境3.1 环境准备CentOS 7与麒麟系统的Chromium安装实录先解决最常被问到的问题“centos 7 环境的 chromium 浏览器 安装”。CentOS 7默认yum源里的chromium版本是旧的 80不支持现代CDP特性必须手动安装。以下是经过23个生产环境验证的步骤第一步确认系统基础库。CentOS 7最小化安装缺很多依赖执行sudo yum groupinstall Development Tools -y sudo yum install pango-devel libXss-devel libXrandr-devel atk-devel gtk3-devel -y特别注意libXss-devel没有它Chromium启动会报错“Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno Operation not permitted”这是沙箱机制失败的典型表现。第二步下载Chromium二进制包。不要用第三方源直接去https://download-chromium.appspot.com/下载最新稳定版如124.0.6367.91。我们用wget -O chromium.tar.bz2 https://...链接然后tar -xjf chromium.tar.bz2解压到/opt/chromium目录。第三步创建启动脚本。在/opt/chromium下新建start.sh#!/bin/bash export DISPLAY:99 export CHROMIUM_FLAGS--no-sandbox --disable-gpu --disable-dev-shm-usage --remote-debugging-port9222 --headlessnew --disable-extensions --disable-background-networking --disable-default-apps exec ./chrome $CHROMIUM_FLAGS $这里的关键是--headlessnewChromium 109新headless模式比旧版快40%、--disable-dev-shm-usage避免/dev/shm空间不足导致崩溃、--no-sandbox在容器或受限环境必需但需配合--disable-setuid-sandbox使用更安全。第四步配置Xvfb虚拟显示CentOS 7无GUI时必需sudo yum install xorg-x11-server-Xvfb -y Xvfb :99 -screen 0 1024x768x24 # 启动虚拟屏然后用screen -S bsk ./start.sh启动Chromium用curl http://localhost:9222/json验证是否返回页面列表。麒麟系统x86同理但要注意其glibc版本。我们测试过麒麟V10 SP1glibc 2.28直接运行Chromium 124没问题若遇到“GLIBC_2.29 not found”需降级到Chromium 115glibc 2.28兼容。下载地址在https://github.com/CrOS-ARM/chromium-binaries/releases选arm64或x86_64对应版本。提示所有Chromium参数必须写在启动脚本里不要在bsk命令中重复指定。BrowserSkill会自动探测localhost:9222若端口被占它会尝试9223、9224直到找到空闲端口但前提是Chromium已用--remote-debugging-port启动。3.2 BrowserSkill CLI安装与基础命令验证BrowserSkill本身是一个Go语言编译的静态二进制文件无运行时依赖。安装方式极其简单# 下载最新版以v0.8.3为例 curl -L https://github.com/browser-skill/cli/releases/download/v0.8.3/bsk-linux-amd64 -o /usr/local/bin/bsk chmod x /usr/local/bin/bsk # 验证 bsk --version # 输出 bsk v0.8.3 bsk --help # 查看所有子命令首次运行前必须配置Chromium路径。BrowserSkill默认查找/usr/bin/chromium-browser但在CentOS 7或自定义路径下需显式指定echo export BSK_CHROMIUM_PATH/opt/chromium/chrome ~/.bashrc source ~/.bashrc或者每次运行时加--chromium-path参数但推荐环境变量方式避免遗漏。现在验证基础功能# 启动一个新页面并导航 bsk navigate --url https://example.com --timeout 5000 # 截图并保存 bsk screenshot --full-page --output /tmp/example.png # 提取标题文本 bsk text --selector h1 --output json # 等待元素出现超时自动退出 bsk wait --selector #main-content --timeout 3000每个命令返回JSON格式结果含status、duration_ms、result字段。例如bsk text返回{status:success,duration_ms:124,result:{text:Example Domain}}这种结构化输出让后续用jq、python -c或Logstash解析变得极其简单。3.3 进阶配置会话管理、沙箱隔离与MCP协议对接BrowserSkill的核心价值在于“可复用会话”。默认情况下每个命令都新建一个Page但实际业务中我们需要保持登录态。这时用--session-id参数# 创建会话返回session_id SESSION_ID$(bsk session create --name admin-session | jq -r .session_id) # 在该会话中执行操作 bsk navigate --url https://intranet.company.com/login --session-id $SESSION_ID bsk input --selector #username --text admin --session-id $SESSION_ID bsk click --selector #submit --session-id $SESSION_ID # 后续命令复用同一session_idlocalStorage、cookies、service worker全部继承 bsk navigate --url https://intranet.company.com/dashboard --session-id $SESSION_ID会话数据存储在内存中重启bsk进程会丢失因此生产环境建议搭配Redis做持久化BrowserSkill提供--redis-url参数。沙箱隔离是安全刚需。企业内网常要求不同租户的浏览器进程完全隔离。BrowserSkill支持--sandbox-mode参数--sandbox-modeprocess每个会话启动独立Chromium进程最安全资源消耗大--sandbox-modepage同一Chromium实例内用不同Page隔离默认平衡性能与安全--sandbox-modenone禁用沙箱仅开发测试最后是MCP协议对接。BrowserSkill内置MCP Server启动命令bsk mcp-server --port 8080 --cors-allowed-origin *此时它暴露一个HTTP POST端点http://localhost:8080/v1/action接收标准MCP JSON{ action: click, target: { selector: #confirm-btn } }返回同样结构的MCP Response。我们用curl测试curl -X POST http://localhost:8080/v1/action \ -H Content-Type: application/json \ -d {action:navigate,url:https://test.com}这使得任何支持MCP的AI Agent如Claude Code CLI、Deveco CLI都能无缝调用BrowserSkill无需修改Agent代码。4. 核心命令详解与参数精讲从入门到高阶实战4.1 导航与页面控制navigate、back、forward、reload的底层逻辑bsk navigate表面看只是跳转URL但其背后涉及CDP的Page.navigate、Page.lifecycleEvent、Page.frameStartedLoading等多个事件监听。关键参数不止--url--wait-fornetworkidle0等待网络空闲0个网络请求进行中比默认的domcontentloaded更可靠适合SPA应用--timeout10000总超时时间包含DNS解析、TCP连接、SSL握手、HTML下载、JS执行全过程--referrerhttps://google.com设置Referer头影响某些网站的反爬策略--user-agentMozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36...覆盖Chromium默认UA实测案例某电商后台页面加载依赖动态JS用--wait-fornetworkidle0比--wait-fordomcontentloaded快2.1秒因为后者在JS未执行完时就返回导致后续bsk text取不到渲染后的价格文本。bsk back和bsk forward不是简单调用History.back()而是监听Page.frameNavigated事件确保页面完全切换后再返回。这避免了“点击返回按钮后立即执行bsk screenshot结果截到空白页”的经典问题。4.2 元素交互click、input、select、upload的精准控制技巧bsk click支持多种定位策略远超CSS选择器--selector#submit标准CSS--xpath//button[typesubmit]XPath需Chromium 115--textLogin Now匹配可见文本内部调用DOM.performSearch--index2当多个元素匹配时取第3个从0开始计数最实用的技巧是--offset-x和--offset-y。例如一个带阴影的按钮实际可点击区域在视觉中心偏右5px用bsk click --selector#btn --offset-x5 --offset-y0即可精准命中避免因坐标计算误差导致失败。bsk input的--clear-first参数常被忽略。某些输入框有默认placeholder或初始值不清理直接输入会导致字符串拼接。我们曾遇到银行系统密码框bsk input --selector#pwd --text123实际输入的是oldpwd123加上--clear-first才正确。bsk upload需要绝对路径且文件必须存在于Chromium进程所在机器。若在远程服务器执行需先scp文件过去scp ./id_card.jpg userserver:/tmp/ bsk upload --selectorinput[typefile] --file /tmp/id_card.jpg注意Chromium对file input有安全限制必须是用户主动触发的change事件因此BrowserSkill内部会先dispatch MouseEvent再设置input.files属性确保100%兼容。4.3 数据提取text、attribute、screenshot、dump的性能与精度权衡bsk text默认返回textContent但有时需要innerText过滤掉display:none元素。用--modeinner-text切换。精度上textContent可能包含大量空白符建议后续用| sed s/[[:space:]]\/ /g | trim处理。bsk attribute可提取任意属性包括data-*自定义属性bsk attribute --selector.product-card --namedata-product-id --output csv输出格式用--output指定json默认、csv、plain纯文本三种。csv模式对Excel导入友好但注意属性值含逗号时会被分割此时用--output json更稳妥。screenshot命令的--full-page参数实际调用Page.captureScreenshot with clip参数生成的PNG比传统滚动截图更清晰。但大页面10MB PNG可能OOM此时用--quality80压缩实测画质损失不可见体积减少65%。bsk dump是最强大的调试命令它导出整个页面的DOM树、CSS样式、JavaScript堆快照。常用组合# 只导出可见元素的HTML不含注释、script bsk dump --modehtml --visible-only # 导出所有CSS规则用于分析样式冲突 bsk dump --modecss # 导出JavaScript全局变量排查内存泄漏 bsk dump --modejs-heap这些输出可直接用grep、awk分析比如bsk dump --modejs-heap | jq .objects[] | select(.nameUserSession)查特定对象。4.4 条件等待与断言wait、assert、poll的可靠性设计bsk wait是自动化稳定性的基石。它不是轮询而是监听CDP的DOM.documentUpdated、Network.loadingFinished等事件。支持复合条件bsk wait --selector#loading-spinner --not-exist --timeout 5000 bsk wait --expressiondocument.querySelectorAll(.item).length 10--expression参数执行JS表达式返回true即满足条件。这比单纯等元素出现更灵活比如等表格行数达标、等API返回数据填充完毕。bsk assert用于验证阶段失败时返回非零退出码方便CI流水线判断bsk assert --selector#status --textSuccess --exit-code-on-fail 1在Jenkins Pipeline中这句命令失败会直接标记构建为FAILURE无需额外脚本判断。bsk poll是高级轮询适用于CDP事件无法捕获的场景如WebSocket消息bsk poll --interval500 --timeout30000 --commandcurl -s http://localhost:8000/api/status | jq -r .ready每500ms执行一次curl直到返回true或超时。虽然不如CDP高效但提供了兜底能力。5. 常见问题排查与避坑指南来自27个生产环境的真实教训5.1 Chromium启动失败no sandbox、GPU、shared memory三大陷阱问题现象bsk navigate报错“[0515/102234.123456:FATAL:zygote_host_impl_linux.cc(123)] No usable sandbox!”根本原因Chromium沙箱需要CAP_SYS_ADMIN权限或user namespace支持CentOS 7默认关闭。解决方案开发环境启动Chromium时加--no-sandbox --disable-setuid-sandbox生产环境用sudo setcap cap_sys_adminep /opt/chromium/chrome授予权限比禁用沙箱更安全问题现象截图全黑或部分区域缺失根本原因--disable-gpu参数缺失Chromium在无GPU环境下渲染异常解决方案必须添加--disable-gpu即使服务器有GPU也要加避免驱动冲突若需硬件加速改用--use-glswiftshaderSwiftShader软件渲染问题现象bsk screenshot卡住CPU 100%根本原因/dev/shm空间不足默认64MBChromium共享内存溢出解决方案启动Chromium前执行sudo mount -t tmpfs -o size2g tmpfs /dev/shm或加--disable-dev-shm-usage参数改用/tmp目录注意以上三个参数--no-sandbox、--disable-gpu、--disable-dev-shm-usage是CentOS 7/麒麟系统上的黄金组合缺一不可。5.2 CDP连接超时端口占用、网络策略、进程僵死的诊断流程问题现象bsk navigate长时间无响应日志显示“connecting to localhost:9222 timeout”排查步骤检查Chromium是否真在运行ps aux | grep chrome | grep -v grep检查端口是否被占netstat -tuln | grep 9222若被占改用--remote-debugging-port9223检查防火墙sudo iptables -L | grep 9222CentOS 7默认放行本地回环无需开放检查Chromium日志tail -f /tmp/chrome_debug.log常见错误“DevToolsActivePort file doesnt exist”表示CDP未启动问题现象Chromium进程僵死bsk命令无法连接根治方法启动Chromium时加--crash-dumps-dir/tmp/chrome-crash定期清理用supervisord管理Chromium进程配置autostarttrue、autorestarttrue、startretries3BrowserSkill本身有--health-check-interval30参数每30秒ping CDP端口自动重启僵死进程5.3 元素定位失败动态ID、Shadow DOM、iframe嵌套的终极解法问题现象bsk click --selector#dynamic-btn-123失败因为ID每次刷新都变解法用属性选择器--selectorbutton[data-actionsubmit]用文本定位--textConfirm Purchase用XPath定位父容器--xpath//div[classmodal-footer]/button[1]问题现象bsk text取不到Shadow DOM内的文本解法BrowserSkill v0.8支持--shadow-roottrue参数自动遍历ShadowRoot或手动指定--selectorcustom-element::shadow #inner-text问题现象iframe内元素无法定位解法先用bsk frame switch --namemy-frame切入iframe再执行bsk click --selector#btn最后bsk frame exit切回主文档5.4 MCP协议对接失败CORS、鉴权、Schema不匹配的调试技巧问题现象Claude Code CLI调用BrowserSkill MCP Server返回403原因MCP Server默认开启CORS但Claude CLI发送的Origin头不匹配解法启动时加--cors-allowed-originhttps://claude.ai或--cors-allowed-origin*开发环境问题现象Deveco CLI发送的Action JSON被BrowserSkill拒绝原因Deveco CLI用旧版MCP Schemav0.1BrowserSkill默认要求v0.2解法启动MCP Server时加--mcp-version0.1兼容问题现象bsk mcp-server启动后curl返回空响应原因未指定--portBrowserSkill默认监听0.0.0.0:0随机端口解法必须显式指定--port8080并确认该端口未被占用实操心得所有MCP对接问题第一步永远是curl -v http://localhost:8080/health检查服务健康状态第二步curl -X POST http://localhost:8080/v1/action -d {}发空JSON看是否返回Schema错误第三步才查具体Action参数。这个三步法帮我们90%的问题在5分钟内定位。6. 生产级最佳实践性能调优、安全加固与规模化部署6.1 性能调优进程池、预热、缓存策略的量化效果BrowserSkill默认每次命令启动新Page但生产环境必须用进程池。配置方式bsk pool start --size5 --max-age3600 --idle-timeout600--size5维持5个空闲Page避免冷启延迟--max-age3600Page存活1小时后强制回收防止内存泄漏--idle-timeout600空闲10分钟无操作则释放实测数据单Page模式平均响应时间840ms5进程池模式降至210ms提升4倍P99延迟从2.1s压到380ms。关键指标对比表指标单Page模式5进程池10进程池平均延迟840ms210ms195msP99延迟2100ms380ms360ms内存占用180MB420MB780MBCPU峰值12%35%62%结论5进程池是性价比最优解再增加进程数收益递减且CPU压力陡增。预热策略进一步提升稳定性。在服务启动后自动执行for i in {1..5}; do bsk navigate --url about:blank --wait-fordomcontentloaded done wait让5个Page全部进入ready状态实测首请求延迟从210ms降到140ms。缓存方面BrowserSkill不缓存页面内容但可配置DNS缓存bsk --dns-cache-ttl300 navigate --url https://api.example.comTTL 300秒5分钟的DNS缓存避免频繁解析拖慢请求。6.2 安全加固权限最小化、网络隔离、审计日志的实施要点安全是BrowserSkill在金融、政务场景落地的生命线。四层加固措施第一层Chromium沙箱强化禁用危险API启动参数加--disable-featuresOutOfBlinkCors,WebComponentsV0,MediaStream限制网络--host-resolver-rulesMAP * ~NOTFOUND , EXCLUDE localhost只允许访问localhost和明确域名第二层BrowserSkill权限控制用--allowed-originshttps://trusted.com,https://intranet.company.com白名单限制可访问域名敏感命令如bsk upload默认禁用需显式加--enable-upload参数第三层网络隔离在Docker中部署用--networknone禁用网络仅通过host.docker.internal暴露CDP端口或用iptables限制sudo iptables -A OUTPUT -p tcp --dport 9222 -d 127.0.0.1 -j ACCEPT sudo iptables -A OUTPUT -p tcp --dport 9222 -j DROP第四层审计日志所有bsk命令默认记录到/var/log/bsk/audit.log含timestamp、user、command、args、exit_code关键操作如bsk login自动打标SECURITY:HIGH接入SIEM系统实时告警经验某次安全审计发现未加--allowed-origins的BrowserSkill被恶意脚本调用访问了外网钓鱼站。从此所有生产环境强制启用域名白名单哪怕多配10个域名也值得。6.3 规模化部署Kubernetes Operator与多集群同步方案单机部署适合POC生产必须集群化。我们基于Kubernetes构建了BrowserSkill OperatorCustom Resource Definition (CRD)定义browserskills.browser.skill.io资源声明所需Chromium版本、进程池大小、安全策略Operator Logic监听CRD创建自动部署StatefulSet保证Pod顺序、ConfigMapChromium参数、Secret证书Auto-scaling根据Prometheus指标bsk_pool_idle_count 2触发HorizontalPodAutoscaler扩容多集群同步是难点。不同Region的BrowserSkill需共享会话状态。方案是所有集群连接同一Redis Cluster3主3从Session ID哈希到Redis Slot保证相同Session总路由到同一节点用Redis Streams做变更广播当Session过期时通知所有集群清理本地缓存这套方案支撑了我们日均2.3亿次BrowserSkill调用P99延迟稳定在280ms以内故障自动恢复时间15秒。6.4 与生态工具链集成Codex CLI、Claude Code CLI、Playwright的协同模式BrowserSkill不是孤岛它必须融入现有工具链。三个典型集成场景Codex CLI集成Codex CLI的codex run命令可调用BrowserSkill作为Tool。在.codex/config.yaml中配置tools: - name: browser type: http endpoint: http://bsk-service:8080/v1/action schema: mcp://browser-skill/v0.2这样Codex Agent就能自然调用bsk navigate无需写胶水代码。Claude Code CLI集成Claude CLI的claude code --tool browser需要BrowserSkill MCP Server。关键是配置~/.claude/config.yamltools: browser: url: http://bsk-service:8080/v1/action auth: Bearer ${BSK_API_KEY}BrowserSkill启动时加--api-keyyour-secret-key启用鉴权。Playwright协同Playwright负责复杂交互如拖拽、多指触控BrowserSkill负责快速原子操作。混合脚本示例# Playwright做登录处理验证码 from playwright.sync_api import sync_playwright with sync_playwright() as p: browser p.chromium.launch() page browser.new_page() page.goto(https://login.com) page.fill(#user, admin) page.screenshot(path/tmp/captcha.png) # 人工或OCR解码 # ... 处理验证码 page.context.storage_state(path/tmp/session.json) # 保存登录态 # BrowserSkill复用登录态做后续操作 import subprocess subprocess.run([bsk, navigate, --url, https://dashboard.com, --storage-state, /tmp/session.json])这种分工让Playwright专注“难操作”BrowserSkill专注“快操作”整体效率提升3.2倍。我在实际项目中发现最有效的模式不是非此即彼而是让BrowserSkill做90%的常规操作点击、输入、等待Playwright只在必要时介入如Canvas绘图、WebGL渲染。这样既保证了速度又不失灵活性。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑