You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker版Directus Flow:如何运行自定义函数执行Puppeteer?

解决方案:Directus Flow中集成Puppeteer的两种可行方式

针对你的需求,有两种直接可行的方案,都能绕过Run Script的限制,实现遍历数据并调用Puppeteer抓取内容的功能:

一、使用自定义函数(Run Function节点)

这是最贴合现有Flow流程的方案,直接在Flow中通过Run Function调用自定义扩展的服务器端代码:

  1. 创建自定义函数扩展

    • 本地初始化一个Directus函数扩展项目,在package.json中添加puppeteer依赖。
    • 编写函数逻辑,接收Flow中Read Data返回的数组作为参数,遍历每个条目并执行Puppeteer抓取操作。
    • 构建扩展后,将打包好的扩展目录挂载到Docker容器的/directus/extensions目录下。
  2. 函数代码示例

    export default async function handler(data) {
      const puppeteer = require('puppeteer');
      const { items } = data; // 接收Read Data传入的数据集
    
      for (const item of items) {
        const browser = await puppeteer.launch({
          headless: 'new',
          args: ['--no-sandbox', '--disable-setuid-sandbox'] // Docker环境下必须配置
        });
        const page = await browser.newPage();
        await page.goto(item.target_url); // 假设数据集中包含目标URL字段
    
        // 执行抓取逻辑,示例为获取页面标题
        const title = await page.title();
        console.log(`抓取结果: ${title}`);
    
        // 可选:将抓取结果写回Directus,更新对应条目字段
        await data.$directus.items('your_collection').update(item.id, { scraped_data: title });
    
        await browser.close();
      }
    
      return { success: true };
    }
    
  3. Flow中配置
    在Flow里替换Run Script为Run Function节点,选择你创建的自定义函数,将Read Data的输出作为参数传入函数即可。

二、创建自定义API端点,通过Webhook调用

如果更倾向于通过API接口实现,可以构建自定义API扩展,再用Flow的Webhook节点触发:

  1. 构建自定义API扩展

    • 创建一个Directus API扩展,添加POST类型的端点(比如/scrape-data)。
    • 在端点处理函数中,接收请求体里的数据集,遍历并执行Puppeteer抓取逻辑(逻辑和上述函数一致)。
    • 将扩展挂载到Docker的/directus/extensions目录下。
  2. Flow中配置
    在Flow里添加Webhook节点,设置请求方法为POST,URL指向你的自定义API端点,将Read Data的输出作为请求体发送即可。

Docker环境注意事项

Puppeteer依赖系统级库,官方Directus镜像默认未安装,需额外配置:

  • 若使用docker-compose,可在服务中添加command字段,启动时自动安装依赖:
    services:
      directus:
        image: directus/directus:latest
        command: >
          sh -c "apt-get update && apt-get install -y libx11-xcb1 libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2 && npm start"
    
  • 也可以直接构建包含这些依赖的自定义Directus镜像,避免每次启动重复安装。

内容的提问来源于stack exchange,提问作者Viktor H. Morales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:37:25