
如果你正在寻找一种能通过 API 驱动浏览器、实现自动化任务编排的工具那么 Figranium 值得你花几分钟了解一下。这是一个开源项目核心亮点在于“可视化编排”和“API 执行”。简单说你可以像搭积木一样在界面上拖拽组件来设计一个浏览器操作流程比如登录、点击、填写表单、截图然后把这个流程打包成一个 API 接口随时随地通过 HTTP 请求来触发执行。它被打包成了 Docker 镜像意味着部署和运行非常标准化几乎不挑环境。对于开发者、测试工程师或需要处理大量网页自动化任务如数据抓取、UI 测试、批量操作的团队来说Figranium 提供了一个低代码的解决方案。你不用再为每个任务写一长串 Puppeteer 或 Playwright 脚本而是通过可视化界面配置然后通过 API 调用这大大降低了自动化任务的门槛和迭代成本。本文将带你快速了解 Figranium 的核心能力、如何通过 Docker 一键部署、如何创建你的第一个浏览器任务以及如何通过 API 来调度和执行它。1. 核心能力速览在深入部署和测试之前我们先通过一个表格快速把握 Figranium 的关键信息这能帮你判断它是否适合你的技术栈和需求场景。能力项说明项目类型浏览器自动化任务编排与执行平台核心特点可视化流程设计、通过 API 触发执行、Docker 容器化部署技术栈基于 Node.js / 可能集成 Puppeteer 或 Playwright (需根据实际项目确认)部署方式Docker 一键部署 (首选)硬件门槛极低。主要依赖 Docker 环境对 CPU/内存无特殊要求无需 GPU。启动方式Docker Compose 或 Docker run 命令启动服务主要功能1. 可视化拖拽创建浏览器工作流 (导航、点击、输入、截图等)。2. 将工作流发布为可调用的 REST API 端点。3. 通过 API 传递参数动态执行任务。4. 查看任务执行历史和结果如截图、输出数据。是否支持 API是核心功能就是提供执行任务的 API。是否支持批量任务可通过 API 循环调用或外部调度器如 Cron, Airflow实现批量调度。适合场景网页自动化测试、数据抓取需遵守 robots.txt 及网站条款、定时巡检、重复性网页操作自动化、为其他系统提供浏览器操作能力。2. 适用场景与使用边界Figranium 并非万能明确它的适用边界能帮助你更有效地利用它。它非常适合以下场景自动化测试为 Web 应用创建可视化回归测试用例并通过 CI/CD 管道 API 触发执行。数据抓取与监控定时抓取公开的、允许自动化访问的网页数据如价格、新闻、状态并将流程 API 化。工作流自动化将繁琐的、有固定步骤的网页操作如每日登录系统下载报表自动化节省人力。服务集成为你开发的其他应用如内部工具、聊天机器人添加“操作浏览器”的能力而无需在每个应用中嵌入浏览器驱动。快速原型验证需要快速验证某个网页交互流程是否可行时用可视化方式搭建比写代码更快。需要注意的使用边界与合规要求合法合规使用严禁用于攻击、爬取未经授权或明确禁止的数据、刷票、恶意注册等任何违反法律法规或目标网站服务条款的行为。使用前务必确认目标网站的robots.txt和用户协议。性能与并发作为单实例 Docker 服务其并发处理能力有限。如果需要高并发执行大量任务需要考虑分布式部署或任务队列方案这通常需要自行扩展架构。复杂交互限制可视化编排适合标准化的线性流程。对于需要复杂逻辑判断如基于页面内容动态决策、处理大量验证码或高强度反爬机制的场景可能仍需定制化代码。资源消耗每个任务执行都会启动一个浏览器实例可能是无头模式会消耗一定的内存和 CPU。在资源有限的服务器上运行大量并发任务时需谨慎。状态保持通常每次 API 调用是一个独立会话。如果需要保持登录状态Cookie、Session跨任务执行需要查看 Figranium 是否支持上下文Context或 Cookie 的保存与复用功能。3. 环境准备与前置条件部署 Figranium 非常简单核心依赖只有一个Docker。如果你的机器上已经安装了 Docker 和 Docker Compose那么环境准备就完成了 99%。以下是详细的检查清单操作系统支持 Linux (Ubuntu, CentOS 等)、macOS 和 Windows。推荐 Linux 服务器环境用于生产或长期运行。Docker 引擎确保已安装并运行 Docker。可以通过以下命令验证docker --version docker-compose --version # 或 docker compose version (新版本)如果未安装请参考 Docker 官方文档进行安装。网络与防火墙确保服务器开放了 Figranium 服务将要使用的端口例如3000并且能够访问外网因为浏览器需要加载目标网页。磁盘空间预留至少 1-2GB 的可用空间用于存放 Docker 镜像和任务产生的临时文件如截图。权限确保当前用户有执行docker命令的权限通常需要将用户加入docker用户组。4. 安装部署与启动方式Figranium 提供了 Docker 化部署这是最推荐的方式能避免复杂的本地环境依赖问题。假设你已经从项目的代码仓库如 GitHub获取了docker-compose.yml文件。通常一个典型的docker-compose.yml配置如下所示version: 3.8 services: figranium: image: your-org/figranium:latest # 镜像名需根据实际项目确认 container_name: figranium restart: unless-stopped ports: - 3000:3000 # 将容器内3000端口映射到主机3000端口 environment: - NODE_ENVproduction # 其他可能的环境变量如数据库连接等 volumes: - ./data:/app/data # 挂载数据卷持久化任务配置和结果 # 注意浏览器自动化工具可能需要额外的内核参数或共享内存 # 例如对于Playwright/Puppeteer可能需要添加 # shm_size: 1gb # 或 # ipc: host启动步骤获取部署文件在服务器上创建一个目录如figranium并将docker-compose.yml文件放入其中。启动服务在该目录下执行以下命令docker-compose up -d命令执行后Docker 会拉取镜像如果本地没有并启动容器。-d参数表示在后台运行。验证服务使用以下命令查看容器状态和日志docker-compose ps # 查看状态应为“Up” docker-compose logs -f figranium # 查看实时日志观察启动有无报错访问 Web UI如果日志显示服务启动成功打开浏览器访问http://你的服务器IP:3000。你应该能看到 Figranium 的可视化编排界面。一键启动的便利性整个过程只需几条命令无需安装 Node.js、npm 包或浏览器驱动。Docker 帮你隔离了所有依赖这也是该项目最大的优势之一。5. 功能测试与效果验证服务启动后我们通过创建一个简单的任务来验证核心功能是否正常工作。5.1 创建第一个可视化浏览器任务我们的测试目标是让浏览器打开 CSDN 首页在搜索框输入“Docker”然后点击搜索按钮最后对搜索结果页进行截图。登录/进入编辑界面首次访问 Web UI 可能需要注册或直接进入。找到创建新任务或工作流Workflow的按钮。添加“导航”节点从左侧组件库拖拽一个“Navigate”导航或“Go to URL”节点到画布。在节点属性中填入 URLhttps://www.csdn.net。添加“输入文本”节点拖拽一个“Type Text”或“Fill Field”节点。将其连接到导航节点之后。在这个节点的属性中你需要指定元素选择器。假设我们通过检查元素发现搜索框的 CSS 选择器是#toolbar-search-input。那么选择器#toolbar-search-input输入文本Docker有些工具可能需要先添加“等待元素”节点确保页面加载完成添加“点击”节点拖拽一个“Click”节点。连接到输入节点之后。同样需要指定元素选择器比如搜索按钮的选择器是#toolbar-search-button。添加“截图”节点拖拽一个“Screenshot”或“Take Screenshot”节点。连接到点击节点之后。你可以选择截图整个页面或某个特定区域并设置截图保存的名称如search_result.png。保存并发布任务给这个工作流起个名字例如CSDN_Search_Docker。点击保存。然后找到“发布为 API”或“生成 Endpoint”的选项。发布后系统会生成一个唯一的 API 访问地址Endpoint和一个可能的 API Key。5.2 通过 API 触发任务执行现在我们离开可视化界面用最通用的 HTTP 工具来调用这个任务。获取 API 信息在 Figranium 的 API 管理或任务详情页面找到你刚创建的任务CSDN_Search_Docker。记录下API URL: 通常是http://你的服务器IP:3000/api/v1/run/:task_id或类似格式。API Key(如果需要): 用于认证的令牌。使用 cURL 调用打开终端执行以下命令请替换为你的实际 URL 和 Keycurl -X POST \ http://localhost:3000/api/v1/run/your_task_id_here \ -H Authorization: Bearer YOUR_API_KEY \ -H Content-Type: application/json \ -d {}因为我们的任务不需要额外输入参数所以请求体-d是空的 JSON{}。如果需要动态传递参数例如搜索关键词请求体可能是{keyword: Kubernetes}并在任务节点中引用这个变量{{keyword}}。观察执行与结果调用响应API 调用后通常会立即返回一个 JSON包含任务执行 IDexecution_id和状态如accepted。查询结果你可能需要通过另一个 API 端点使用execution_id来查询任务最终状态和输出。例如curl -X GET \ http://localhost:3000/api/v1/execution/your_execution_id \ -H Authorization: Bearer YOUR_API_KEY获取输出在返回的结果中可能会包含截图文件的存储路径或直接的可访问 URL以及任务执行过程中的日志。判断成功的标准API 调用返回 HTTP 状态码202(已接受) 或200(成功)。通过查询接口最终任务状态为completed或success。在指定的输出目录或通过返回的 URL 能够成功下载到截图文件search_result.png并且图片内容符合预期即显示 CSDN 对“Docker”的搜索结果页。6. 接口 API 与批量任务API 是 Figranium 的灵魂本节详细拆解其调用方式并探讨如何实现批量任务。6.1 API 调用详解一个完整的任务执行 API 交互流程通常如下sequenceDiagram participant Client as 客户端/调用方 participant API as Figranium API Server participant Worker as 浏览器工作进程 Client-API: POST /api/run/{task_id}brBody: {“param1”: “value1”} Note over API: 验证API Keybr接收任务 API--Client: 202 Acceptedbr{“execution_id”: “abc123”, “status”: “queued”} API-Worker: 分配任务 Worker-Worker: 启动浏览器执行可视化流程 Worker--API: 任务完成上传结果截图/数据 Client-API: GET /api/execution/{execution_id} (轮询) API--Client: 200 OKbr{“status”: “completed”, “result”: {…}}关键端点示例触发执行(POST /api/v1/run/:task_id)curl -X POST http://localhost:3000/api/v1/run/task_01 \ -H Authorization: Bearer sk_xxx \ -H Content-Type: application/json \ -d {search_keyword: Playwright, headless: true}查询状态(GET /api/v1/execution/:execution_id)curl -X GET http://localhost:3000/api/v1/execution/exec_abc123 \ -H Authorization: Bearer sk_xxxPython 调用示例import requests import time API_BASE http://localhost:3000/api/v1 API_KEY sk_your_api_key_here TASK_ID your_task_id_here headers { Authorization: fBearer {API_KEY}, Content-Type: application/json } # 1. 触发任务执行 run_url f{API_BASE}/run/{TASK_ID} payload {url: https://example.com, action: screenshot} resp_run requests.post(run_url, jsonpayload, headersheaders) execution_data resp_run.json() execution_id execution_data.get(execution_id) print(f任务已提交执行ID: {execution_id}) # 2. 轮询查询结果 status_url f{API_BASE}/execution/{execution_id} for i in range(10): # 最多轮询10次 time.sleep(2) # 每次间隔2秒 resp_status requests.get(status_url, headersheaders) status_data resp_status.json() current_status status_data.get(status) print(f轮询 {i1}: 状态 - {current_status}) if current_status in [completed, failed, timeout]: print(f任务最终状态: {current_status}) print(f结果: {status_data.get(result)}) break6.2 实现批量任务策略Figranium 本身可能不直接提供批量任务队列管理但我们可以通过外部方式轻松实现简单循环调用对于少量、非并发的任务可以用脚本循环调用 API。task_list [{param: A}, {param: B}, {param: C}] for task_params in task_list: # 调用 run API # 可选等待上一个任务完成或异步处理 pass结合任务队列推荐对于大规模、需要调度和重试的批量任务应将 Figranium 作为“工人”集成到成熟的任务队列中。生产者你的主程序将需要执行的任务信息task_id和参数推送到消息队列如 Redis, RabbitMQ, Apache Kafka。消费者编写一个消费者程序从队列中取出任务调用 Figranium 的 API 执行并将结果写回数据库或另一个队列。调度器使用 CronLinux、计划任务Windows或更高级的调度系统如 Apache Airflow, Celery来定时触发生产者。这种架构的优势解耦、支持重试、易于扩展消费者数量以提高并发、具备任务状态跟踪能力。7. 资源占用与性能观察虽然 Figranium 对硬件要求不高但了解其资源消耗模式对稳定运行至关重要。内存占用主要开销来自浏览器实例。每个并发的任务执行都会启动一个独立的浏览器进程即使是无头模式。一个 Chrome/Chromium 实例通常需要 200-500MB 内存。你可以通过以下命令监控容器内存docker stats figranium在运行一个任务时观察MEM USAGE列。如果计划并行运行多个任务需要预留任务数 * (300~500) MB的内存空间。CPU 使用页面渲染、JavaScript 执行会消耗 CPU。在任务执行期间CPU 使用率会有峰值。通过docker stats同样可以观察。磁盘 I/O截图和日志写入会产生磁盘 I/O。如果任务频繁截图或输出大量数据建议将 Docker 卷挂载到 SSD 磁盘上。网络延迟任务执行时间受目标网站响应速度和网络状况影响很大。在 API 调用时需要设置合理的超时时间。# Python requests 设置超时 response requests.post(api_url, jsonpayload, headersheaders, timeout120) # 120秒超时并发与性能优化限制并发在资源有限的服务器上务必通过外部队列或控制调用频率来限制同时执行的 API 请求数量避免内存耗尽。使用无头模式确保任务在无图形界面的无头模式下运行这能减少资源开销。复用浏览器上下文检查 Figranium 是否支持浏览器上下文复用。如果可以多个任务复用同一个浏览器实例但不同标签页或上下文能极大减少启动开销和内存占用。清理资源确保任务执行结束后浏览器进程被正确关闭避免内存泄漏。8. 常见问题与排查方法在部署和使用过程中你可能会遇到以下问题。这里提供系统的排查思路。问题现象可能原因排查方式解决方案容器启动失败端口被占用、镜像拉取失败、权限不足、docker-compose.yml配置错误。1.docker-compose logs figranium查看详细错误日志。2.docker ps -a查看容器状态。3.netstat -tlnp | grep :3000检查端口占用。1. 更换docker-compose.yml中的端口映射如8080:3000。2. 检查网络手动docker pull镜像。3. 使用sudo或确保用户在docker组。Web UI 无法访问服务未启动、防火墙阻止、容器内部服务崩溃。1.docker-compose ps确认状态为Up。2. 在服务器内部curl http://localhost:3000测试。3. 查看容器日志是否有应用级错误。1. 重启服务docker-compose restart。2. 配置服务器安全组/防火墙开放对应端口。3. 根据应用日志修复配置。API 调用返回 401/403API Key 错误、未设置认证头、认证方式不对。1. 检查请求头Authorization格式是否正确Bearer 空格 Key。2. 在 Figranium Web UI 中重新生成或查看正确的 API Key。1. 修正请求头。2. 使用正确的 API Key。API 调用返回 404任务 ID 不存在、API 端点路径错误。1. 核对task_id是否与 Web UI 中显示的一致。2. 检查 API 文档或源码确认正确的端点路径。1. 使用正确的task_id。2. 修正 API URL。任务执行失败或超时目标网站不可访问、页面元素选择器失效、网络超时、浏览器启动失败。1. 在 Figranium 的任务历史或日志中查看详细错误信息。2. 手动访问目标网站确认其可访问性。3. 检查元素选择器是否因页面改版而失效。1. 增加 API 调用和任务执行的超时时间。2. 更新任务流程中的选择器或添加更稳健的等待条件。3. 在任务中添加“截图”节点在失败时截图便于调试。浏览器无法启动容器内Docker 容器缺少必要的系统依赖或权限。查看容器日志常见错误如 “Failed to launch chrome” 或与/dev/shm相关。1. 在docker-compose.yml中为服务增加shm_size: 1gb配置。2. 尝试添加ipc: host配置有安全考量仅用于测试。3. 确保使用的 Docker 镜像包含了所有必要的库如puppeteer镜像通常已包含。截图或输出文件找不到输出路径配置错误、容器内路径未挂载到宿主机。1. 确认任务中配置的输出目录。2. 确认docker-compose.yml中volumes挂载是否正确映射。1. 在任务配置中使用容器内的绝对路径如/app/data/screenshots。2. 确保volumes配置将容器内路径挂载到宿主机可访问的位置如- ./data:/app/data。9. 最佳实践与使用建议为了更稳定、高效、安全地使用 Figranium遵循以下实践建议从小任务开始验证部署后先创建一个最简单的任务如仅打开网页并截图确保整个链路UI 配置 - API 发布 - 调用执行 - 获取结果跑通。元素选择器要稳健优先使用id、>