此存储库已移动。 积极发展继续Crawlio-app/crawlio-browser-agent. 安装最新版本:npx -y crawlio-browser
克劳利奥特工
MCP服务器,通过CDP让AI完全控制实时Chrome浏览器。96个工具(92个浏览器+3个会话记录+1个编译器)具有框架感知智能,可以捕获静态爬虫无法看到的内容。
](https://www.npmjs.com/package/crawlio-browser) 
何时使用Crawlio代理
当您的AI需要与…交互时,请使用Crawlio Agent 真实浏览器 --SPA、经过身份验证的页面、动态内容、JS渲染框架。与无头浏览器工具不同,Crawlio Agent连接到 您的实际Chrome 通过轻量级扩展,让人工智能访问您的登录会话、Cookie和完整浏览器状态。
克劳利奥特工vs剧作家MCP: 剧作家MCP推出无头浏览器。Crawlio Agent连接到您现有的Chrome浏览器——没有单独的浏览器进程,没有登录流,可以完全访问您的标签和会话。
快速开始
- 安装 Chrome 扩展
- 运行init向导:
npx crawlio-browser init就是这样。自动检测和配置Claude Code、Cursor、VS Code、Codex、Claude Desktop、ChatGPT Desktop和另外8个MCP客户端。
初始化向导选项
npx crawlio-browser init # Default: code mode, stdio transport
npx crawlio-browser init --full # Full mode (96 individual tools)
npx crawlio-browser init --portal # Portal mode (persistent HTTP server)
npx crawlio-browser init --cloudflare # Add Cloudflare MCP (89 tools, no wrangler)
npx crawlio-browser init --dry-run # Show what would happen
npx crawlio-browser init --yes # Skip prompts (CI / scripted installs)
npx crawlio-browser init -a claude # Target specific MCP client手动设置(任何客户端)
Per-client manual config
克劳德桌面版 --添加到 claude_desktop_config.json:
{ "mcpServers": { "crawlio-browser": { "command": "npx", "args": ["-y", "crawlio-browser"] } } }克劳德代码(门户模式) --开始 npx crawlio-browser --portal,然后添加到 .mcp.json:
{ "mcpServers": { "crawlio-browser": { "type": "http", "url": "http://127.0.0.1:3001/mcp" } } }克劳德代码(stdio):
claude mcp add crawlio-browser -- npx -y crawlio-browser光标 --添加到 .cursor/mcp.json:
{ "mcpServers": { "crawlio-browser": { "command": "npx", "args": ["-y", "crawlio-browser"] } } }帆板运动 --添加到Windsurf设置>MCP:
{ "mcpServers": { "crawlio-browser": { "command": "npx", "args": ["-y", "crawlio-browser"] } } }Cline(VS代码) --添加到 settings.json:
{ "cline.mcpServers": { "crawlio-browser": { "command": "npx", "args": ["-y", "crawlio-browser"] } } }ChatGPT桌面 --设置>集成>MCP: 网址: http://127.0.0.1:3001/mcp |类型:流式HTTP
运作原理
AI Client (stdio) --> MCP Server (Node.js) --> Chrome Extension (MV3)
crawlio-browser WebSocket -> CDPMCP服务器通过WebSocket与Chrome扩展程序通信。该扩展程序通过Chrome DevTools协议控制浏览器,该协议与Chrome DevTools和Playwright使用的协议相同。
体系结构:JIT上下文运行时
执行运行时建立在四个支柱之上,将其与无状态云沙盒分开:
- 注意稀释治疗 --3工具(
search,execute,connect_tab)而不是96。代理通过以下方式按需发现功能search,保持上下文窗口干净,工具选择准确。 - 多态语境 --在代码执行之前,运行时会探测浏览器中的框架签名,并注入变形
smart带有框架原生访问器(React、Vue、Next.js、Shopify等)的对象。--跨4层的17个命名空间)。 - 确定执行 --每一个
smart.click()运行具有渐进退避的可操作性检查(可见性、维度、启用状态、覆盖检测),然后强制执行操作后解决延迟(500ms/300ms/1000ms)。 - 代理REPL --运行时保持与浏览器的持久连接。当脚本失败时,浏览器状态将被保留——代理读取结构化错误并对同一实时会话进行迭代。
execute call lifecycle:
search -> discover capabilities
detect -> probe DOM for active frameworks
inject -> build polymorphic smart object
run -> execute with actionability checks + settle delays
return -> result or structured error (browser state preserved)两种模式
代码模式(3个工具)--默认
将96个工具拆分为3个高级工具,模式标记减少约95%:
| 工具 | 说明 |
|---|---|
search | 按关键字查找可用命令 |
execute | 使用以下命令运行异步JS bridge, crawlio, smart, sleep,以及 compileRecording 在范围内 |
connect_tab | 连接到浏览器选项卡 |
// Navigate and screenshot
await bridge.send({ type: 'browser_navigate', url: 'https://example.com' }, 30000);
await sleep(2000);
const screenshot = await bridge.send({ type: 'take_screenshot' }, 10000);
return screenshot;全模式(96工具)
所有直接接触LLM的工具。启用 --full:
npx crawlio-browser init --full智能对象
在代码模式下 smart 对象为框架感知助手提供了自动等待和可操作性检查。
核心方法
| 方法 | 说明 |
|---|---|
smart.evaluate(expression) | 通过CDP在页面中执行JS |
smart.click(selector, opts?) | 自动等待点击,500毫秒结束 |
smart.type(selector, text, opts?) | 自动等待型,300ms稳定 |
smart.navigate(url, opts?) | 以1000ms的稳定时间导航 |
smart.waitFor(selector, timeout?) | 轮询,直到元素可操作 |
smart.snapshot() | 可访问性树快照 |
高阶方法
| 方法 | 说明 |
|---|---|
smart.scrollCapture() | 滚动到底部,沿途捕获内容 |
smart.waitForIdle() | 等待网络+DOM稳定 |
smart.extractPage(opts?) | 结构化页面证据提取(返回 PageEvidence) |
smart.comparePages(a, b) | 在10个维度上区分两个页面快照(返回 ComparisonEvidence) |
类型化证据
结构化分析结果的方法:
| 方法 | 说明 |
|---|---|
smart.finding(data) | 创建已验证的 Finding 有信心得分 |
smart.findings() | 获取所有会话累积结果 |
smart.clearFindings() | 重置会话查找状态 |
研究结果支持置信度传播——数据收集中的差距会自动限制置信度并增加 confidenceCapped / cappedBy 领域。
框架命名空间
当检测到框架时,智能对象会公开特定于框架的助手:
React — smart.react
| 方法 | 返回 |
|---|---|
getVersion() | 版本字符串和捆绑包类型 |
getRootCount() | React根组件的数量 |
hasProfiler() | 分析器是否可用 |
isHookInstalled() | 是否安装了DevTools挂钩 |
Vue.js — smart.vue
| 方法 | 返回 |
|---|---|
getVersion() | Vue版本字符串 |
getAppCount() | Vue应用程序实例数 |
getConfig() | 应用程序配置对象 |
isDevMode() | 是否启用了DevTools |
Angular — smart.angular
| 方法 | 返回 |
|---|---|
getVersion() | ng版本属性值 |
isDebugMode() | 调试API是否可用 |
isIvy() | Ivy编译器是否处于活动状态 |
getRootCount() | 角根元素的数量 |
getState() | 完整状态对象 |
Svelte — smart.svelte
| 方法 | 返回 |
|---|---|
getVersion() | Svelte版本字符串 |
getMeta() | Svelte元数据对象 |
isDetected() | 是否检测到Svelte |
Redux — smart.redux
| 方法 | 返回 |
|---|---|
isInstalled() | 是否安装了Redux DevTools |
getStoreState() | 满店状态 |
Alpine.js — smart.alpine
| 方法 | 返回 |
|---|---|
getVersion() | Alpine版本字符串 |
getStoreKeys() | 存储对象密钥 |
getComponentCount() | 计数 [x-data] 组件 |
Next.js — smart.nextjs
| 方法 | 返回 |
|---|---|
getData() | __NEXT_DATA__ 对象 |
getRouter() | 路由器状态(路径名、查询、asPath) |
getSSRMode() | SSR模式(混合、应用路由器、静态) |
getRouteManifest() | 当前页面数据 |
Nuxt — smart.nuxt
| 方法 | 返回 |
|---|---|
getData() | __NUXT__ 对象 |
getConfig() | 应用程序配置 |
isSSR() | 服务器是否渲染 |
Remix — smart.remix
| 方法 | 返回 |
|---|---|
getContext() | __remixContext 对象 |
getRouteData() | 来自状态的加载器数据 |
Shopify — smart.shopify
| 方法 | 返回 |
|---|---|
getShop() | 店铺元数据(主题、地区、货币) |
getCart() | 购物车对象 |
WordPress — smart.wordpress
| 方法 | 返回 |
|---|---|
isWP() | WordPress是否存在 |
getRestUrl() | REST API终结点 |
getPlugins() | 活动插件列表 |
More frameworks — Gatsby, WooCommerce, Laravel, Django, Drupal, jQuery
| 命名空间 | 方法 |
|---|---|
smart.gatsby | getData(), getPageData() |
smart.woocommerce | getParams() |
smart.laravel | getCSRF() |
smart.django | getCSRF() |
smart.drupal | getSettings() |
smart.jquery | getVersion() |
会话录制
将浏览器会话记录为结构化数据,然后将其编译为可重用的自动化技能。
| 工具 | 说明 |
|---|---|
start_recording | 开始记录交互、导航、网络、控制台 |
stop_recording | 停止并返回完整会话数据 |
get_recording_status | 检查录制是否处于活动状态 |
compile_recording | 将录制的会话转换为SKILL.md自动化 |
录制过程中会自动拦截12个交互工具(点击、键入、导航、滚动等)。每次交互都会捕获参数、结果、时间和页面URL。
// In code mode: record, interact, compile
await bridge.send({ type: 'start_recording' }, 10000);
// ... interact with the page ...
const session = await bridge.send({ type: 'stop_recording' }, 10000);
const skill = compileRecording(session.session, 'my-automation');
return skill;自动设置
可变工具(browser_click, browser_type, browser_navigate, browser_select_option)使用剧作家启发的可操作性检查:
- 飞行前:在操作之前轮询元素可见性、稳定性和启用状态
- 行动:分派CDP命令
- 后结算:等待DOM突变随着逐步回退而停止
[0, 20, 100, 100, 500]ms
这意味着AI不需要手动添加 sleep() 或 waitFor() 操作之间的调用——这些工具会自动处理SPA渲染延迟。
框架检测
检测 64项技术 使用全局变量、DOM标记、元标记、HTTP标头和脚本URL跨4层:
| 层级 | 框架 | 信号强度 |
|---|---|---|
| 元框架 | Next.js、Nuxt、SvelteKit、Remix、Gatsby | 独特的全局变量+父级检测 |
| 核心 | React、Vue.js、Angular、Svelte、Astro、Qwik、SolidJS、Lit、Preact | 全局+DOM标记 |
| CMS和平台 | WordPress、Shopify、Webflow、Squarespace、Wix、Drupal、Magento、Ghost、Bubble | 元标签+全局变量 |
| 库和工具 | jQuery、Bootstrap、Tailwind CSS、Alpine.js、HTMX、Turbo、模板、Redux、Ember.js、Backbone.js | DOM+全局变量 |
多框架检测返回 主要的,重要的 框架(元框架优先)加上 subFrameworks 整个堆栈的数组。
工具参考
连接和状态
| 工具 | 说明 |
|---|---|
connect_tab | 通过URL、选项卡ID或活动选项卡连接到浏览器选项卡 |
disconnect_tab | 断开与当前选项卡的连接 |
list_tabs | 列出所有打开的带有ID和URL的选项卡 |
get_connection_status | 检查CDP连接状态 |
reconnect_tab | 强制重新连接以修复过时的连接 |
get_capabilities | 列出所有工具及其可用性 |
页面捕获
| 工具 | 说明 |
|---|---|
capture_page | 完整捕获:框架+网络+控制台+DOM |
detect_framework | 检测JS框架和版本 |
start_network_capture | 开始录制网络请求 |
stop_network_capture | 停止录制并返回捕获的请求 |
get_console_logs | 获取控制台日志(错误、警告、信息) |
get_cookies | 获取Cookie(敏感值已编辑) |
get_dom_snapshot | 简化的DOM树,支持shadow DOM和iframe |
take_screenshot | 屏幕截图为base64 PNG |
get_response_body | 获取捕获的网络请求的响应正文 |
导航与交互
| 工具 | 说明 |
|---|---|
browser_navigate | 导航到URL(自动结算) |
browser_click | 通过CSS选择器点击元素(自动定位、左/右/中、修饰符) |
browser_double_click | 双击元素 |
browser_type | 在元素中键入文本(自动结算) |
browser_press_key | 按键盘键(Enter、Tab、Escape、快捷键) |
browser_hover | 将鼠标悬停在元素上 |
browser_select_option | 选择 `` 按价值(自动结算) |
browser_scroll | 滚动页面或元素 |
browser_drag | 从一个元素拖动到另一个元素 |
browser_file_upload | 将文件上传到 `` |
browser_wait | 等待N毫秒 |
browser_wait_for | 等待元素状态(可见、隐藏、已连接、已分离) |
网络
| 工具 | 说明 |
|---|---|
browser_intercept | 阻止、修改URL模式的标头或模拟响应 |
emulate_network | 节流网络(离线、3G、4G、WiFi预设) |
set_cache_disabled | 禁用/启用浏览器缓存 |
set_extra_headers | 向所有请求添加自定义标头 |
get_websocket_connections | 列出活动的WebSocket连接 |
get_websocket_messages | 获取WebSocket消息历史记录 |
框架和标签
| 工具 | 说明 |
|---|---|
get_frame_tree | 获取框架层次结构(main+iframe) |
switch_to_frame | 将执行上下文切换到iframe |
switch_to_main_frame | 切换回主机 |
create_tab | 使用URL创建新选项卡 |
close_tab | 按ID关闭选项卡 |
switch_tab | 按ID聚焦选项卡 |
Cookie和存储
| 工具 | 说明 |
|---|---|
set_cookie | 设置cookie(通过CDP支持httpOnly) |
delete_cookies | 按名称/域/路径删除Cookie |
get_storage | 读取本地存储或会话存储 |
set_storage | 写入存储项 |
clear_storage | 清除所有存储项 |
get_databases | 列出IndexedDB数据库 |
query_object_store | 查询IndexedDB对象存储 |
clear_database | 清除或删除IndexedDB数据库 |
对话
| 工具 | 说明 |
|---|---|
get_dialog | 获取待处理的JS对话框(警报/确认/提示) |
handle_dialog | 接受或取消对话框 |
仿真
| 工具 | 说明 |
|---|---|
set_viewport | 设置视口尺寸 |
set_user_agent | 覆盖用户代理字符串 |
emulate_device | 模拟设备(iPhone、iPad、Pixel、Galaxy、台式机) |
set_geolocation | 覆盖地理位置坐标 |
set_stealth_mode | 反检测模式(选择加入,修补Web驱动程序指纹) |
安全
| 工具 | 说明 |
|---|---|
get_security_state | TLS证书详细信息、协议、密码 |
ignore_certificate_errors | 忽略临时环境的证书错误 |
服务人员
| 工具 | 说明 |
|---|---|
list_service_workers | 列出所有服务人员注册 |
stop_service_worker | 停止/注销服务工作者 |
bypass_service_worker | 绕过服务工作者处理网络请求 |
DOM操作
| 工具 | 说明 |
|---|---|
set_outer_html | 替换元素的HTML |
set_attribute | 设置元素属性 |
remove_attribute | 删除元素属性 |
remove_node | 从DOM中删除元素 |
CSS和JS覆盖率
| 工具 | 说明 |
|---|---|
start_css_coverage / stop_css_coverage | 跟踪使用了哪些CSS规则 |
start_js_coverage / stop_js_coverage | 跟踪执行了哪些JS代码 |
get_computed_style | 获取元素的解析CSS属性 |
force_pseudo_state | 力:悬停、:聚焦、:活动状态 |
性能和内存
| 工具 | 说明 |
|---|---|
get_performance_metrics | Chrome指标+网络重要信息(LCP、CLS、FID) |
get_dom_counters | 统计DOM节点、文档、事件侦听器 |
force_gc | 强制垃圾收集 |
take_heap_snapshot | V8堆快照摘要 |
PDF和辅助功能
| 工具 | 说明 |
|---|---|
print_to_pdf | 生成PDF(自定义纸张、边距、方向) |
get_accessibility_tree | 屏幕阅读器审计的可访问性树 |
目标和背景
| 工具 | 说明 |
|---|---|
get_targets | 列出所有Chrome目标(页面、工作程序、扩展程序) |
attach_to_target | 将CDP会话附加到任何目标 |
create_browser_context | 创建孤立的(类似隐身的)上下文 |
可视化调试
| 工具 | 说明 |
|---|---|
highlight_element | 用彩色覆盖物突出显示元素 |
show_layout_shifts | 可视化CLS区域 |
show_paint_rects | 可视化油漆/重新油漆区域 |
会话录制
| 工具 | 说明 |
|---|---|
start_recording | 开始录制浏览器会话 |
stop_recording | 停止录制并返回会话数据 |
get_recording_status | 检查录制状态 |
compile_recording | 将会话编译为SKILL.md自动化 |
Crawlio应用程序集成
可选--必需 Crawlio.app 在本地运行。
| 工具 | 说明 |
|---|---|
extract_site | 开始对活动选项卡的URL进行爬网 |
get_crawl_status | 获取爬网进度和状态 |
get_enrichment | 获取浏览器丰富数据 |
get_crawled_urls | 获取带有状态和分页的已爬网URL |
enrich_url | 在一次通话中导航+捕获+提交丰富内容 |
需求
- Node.js >= 18
- 铬 (或铬)与 Crawlio代理扩展 安装
- Crawlio.app (可选)--用于网站爬行和丰富
许可证
麻省理工学院
