🎨 OpenClaw Canvas控制指南

可视化与演示——让AI看得见、说得清

📅 2026-04-15 ⏱️ 阅读10分钟 🏷️ OpenClaw进阶
"下午4点22分,我的Agent正在给我演示一个新功能。它在屏幕上画了一个流程图,然后用箭头一步步解释每个步骤。我指着其中一块问:'这里能再详细说说吗?' 它立刻在那个区域放大了视图,添加了注释。那一刻,我感觉我不是在和代码对话,而是在和一个耐心的老师在交流。"
世界上有一种沟通叫"图文并茂"。当Agent能展示画面、截取屏幕、渲染可视化内容时,它就不再是一个只会说话的程序,而是一个可视化助手。OpenClaw的Canvas工具,让这一切成为可能。

🎨 什么是Canvas?

OpenClaw的Canvas是一个可视化画布系统,Agent可以通过它:

🛠️ Canvas核心功能

📸
截图

捕获渲染内容

🧪
评估

执行JavaScript

🎬
展示

渲染HTML内容

🔄
导航

加载URL内容

📊
A2UI

交互式界面

👁️
快照

当前状态捕获

📝 使用方法

1. 展示内容(present)

渲染HTML到Canvas
canvas({
  action: "present",
  url: "https://example.com/dashboard"
})

2. 截取屏幕(snapshot)

捕获Canvas当前状态
canvas({
  action: "snapshot",
  outputFormat: "png",
  width: 1200,
  height: 800
})

3. 执行JavaScript(eval)

在Canvas中运行JS代码
canvas({
  action: "eval",
  javaScript: `
    // 在页面上下文中执行
    const data = document.querySelectorAll('.metric');
    return Array.from(data).map(el => el.textContent);
  `
})

4. 导航到URL(navigate)

加载指定页面
canvas({
  action: "navigate",
  url: "https://charts.example.com/data-viz"
})

5. 隐藏Canvas(hide)

关闭Canvas展示
canvas({
  action: "hide"
})

💡 实战场景

场景1:数据可视化演示

生成并展示图表
async function showDataVisualization(data) {
  // 1. 生成HTML图表
  const html = `
    
    
    
      
    
    
      
      
    
    
  `;
  
  // 2. 保存临时文件
  writeFile('/tmp/chart.html', html);
  
  // 3. 展示
  canvas({
    action: "present",
    url: "file:///tmp/chart.html"
  });
  
  // 4. 截图保存
  setTimeout(() => {
    canvas({
      action: "snapshot",
      outputFormat: "png",
      filePath: "/var/www/miaoquai/images/data-viz.png"
    });
  }, 2000);
}

场景2:UI组件展示

展示设计的UI组件
async function showcaseComponent(componentHTML) {
  const wrapper = `
    

组件预览

${componentHTML}
`; canvas({ action: "present", html: wrapper, width: 800, height: 600 }); }

场景3:网站监控截图

定时截取网站状态
async function captureWebsiteStatus(url) {
  // 1. 导航到目标网站
  canvas({
    action: "navigate",
    url: url
  });
  
  // 2. 等待加载
  await new Promise(r => setTimeout(r, 3000));
  
  // 3. 截图
  const screenshot = await canvas({
    action: "snapshot",
    outputFormat: "png",
    fullPage: true
  });
  
  // 4. 保存
  writeFile(`/var/www/miaoquai/screenshots/${Date.now()}.png`, screenshot);
  
  return screenshot;
}

// 设置定时任务
cron({
  name: "网站监控截图",
  schedule: { kind: "every", everyMs: 3600000 },
  payload: {
    kind: "agentTurn",
    message: "截取miaoquai.com首页并保存"
  }
})

场景4:交互式A2UI

创建交互式界面
// 推送A2UI界面
canvas({
  action: "a2ui_push",
  jsonl: JSON.stringify([
    { type: "header", text: "任务管理面板" },
    { type: "button", id: "refresh", text: "刷新数据" },
    { type: "table", data: tasks }
  ])
})
Canvas最佳实践
• 截图前确保内容已完全加载
• 使用合适的尺寸,避免截图过小或过大
• 复杂页面可以先执行JavaScript清理无关元素
• 保存截图时添加时间戳,便于管理
注意事项:
• Canvas渲染需要图形界面环境,无头环境可能受限
• 截图可能包含敏感信息,注意隐私保护
• 外部资源(图片、CSS)需要可访问
• 复杂的JavaScript执行可能需要等待时间

📚 相关链接