上一篇 下一篇 分享链接 返回 返回顶部

把浏览器变成自动干活的助手:AI 工作流搭建教程与配置模板

发布人:慈云数据-客服中心 发布时间:2小时前 阅读量:0

AI浏览器工作流自动化教程|附配置文件

在过去很长一段时间里,浏览器只是我们访问网页、搜索资料、登录后台、处理表单的入口。但随着大模型、浏览器插件、自动化脚本和云端工作流工具的发展,浏览器正在从“信息入口”升级为“智能执行入口”。

所谓 AI浏览器工作流自动化,可以简单理解为:
让浏览器在 AI 的辅助下,自动完成一系列重复性、规则化、半结构化的任务,例如资料收集、网页摘要、表格填写、数据抓取、邮件整理、内容发布、竞品监控、客服辅助、运营报表生成等。

本文将以实用教程的方式,介绍如何搭建一个可复用的 AI 浏览器自动化工作流,并附带示例配置文件,方便你根据自己的业务场景进行修改。


一、什么是 AI 浏览器工作流自动化?

传统的浏览器自动化,通常依赖 Selenium、Playwright、Puppeteer 等工具,通过脚本模拟用户点击、输入、跳转、截图和下载文件。

而 AI 浏览器工作流自动化在此基础上增加了三类能力:

  1. 理解能力
    AI 可以理解网页内容、按钮含义、表单字段、文章主题、用户意图,而不只是机械地查找某个 CSS 选择器。

  2. 决策能力
    当页面结构变化、弹窗出现、内容不完整时,AI 可以根据上下文判断下一步操作,而不是直接报错终止。

  3. 生成能力
    AI 可以自动生成摘要、评论、邮件回复、表格内容、报告草稿,甚至根据网页信息完成二次加工。

因此,一个完整的 AI 浏览器工作流通常包括:

任务目标 → 打开网页 → 识别页面 → 提取信息 → AI分析 → 执行动作 → 保存结果 → 通知用户

二、适合自动化的典型场景

在正式搭建之前,我们先明确哪些任务适合交给 AI 浏览器自动化。

1. 信息采集类

例如:

  • 每天打开多个行业网站,抓取最新资讯;
  • 监控竞品官网价格、活动、功能更新;
  • 收集招聘网站上的岗位信息;
  • 抓取电商平台商品标题、价格、评价摘要;
  • 汇总公众号、新闻站、论坛的热点内容。

这类任务重复性强、页面结构较稳定,非常适合自动化。

2. 内容处理类

例如:

  • 自动阅读文章并生成摘要;
  • 将网页内容整理成 Markdown 笔记;
  • 根据多个页面生成调研报告;
  • 把英文网页翻译成中文;
  • 从长文本中提取时间、人物、公司、金额等关键信息。

AI 的文本理解与生成能力,可以显著减少人工阅读和整理时间。

3. 表单填写类

例如:

  • CRM 客户资料录入;
  • ERP 后台数据提交;
  • 报名表、问卷、工单填写;
  • 批量创建商品、文章、活动页面。

这类场景需要特别注意权限和数据准确性,建议先从半自动模式开始,即 AI 填写后由人工确认提交。

4. 运营发布类

例如:

  • 自动登录后台;
  • 生成标题和摘要;
  • 上传封面;
  • 填写标签;
  • 定时发布内容;
  • 发布完成后截图存档。

适合内容运营、自媒体团队、电商运营和企业市场部门。

5. 监控提醒类

例如:

  • 监控某个页面是否出现关键词;
  • 监控价格是否低于指定阈值;
  • 监控库存是否恢复;
  • 监控公告是否更新;
  • 页面异常时自动发送通知。

这类工作流可以结合定时任务和消息推送工具,实现无人值守运行。


三、整体技术方案

本文示例采用以下技术栈:

模块 推荐工具 作用
浏览器自动化 Playwright 控制浏览器打开网页、点击、输入、截图
AI 能力 OpenAI API / 本地大模型 API 页面理解、摘要、分类、内容生成
配置管理 YAML / JSON 定义任务步骤和参数
数据存储 CSV / SQLite / Notion / 飞书表格 保存采集结果
定时执行 Cron / GitHub Actions / 服务器计划任务 定期运行
通知提醒 企业微信 / 飞书 / Telegram / 邮件 发送结果和异常提醒

为什么推荐 Playwright?

因为它具有以下优势:

  • 支持 Chromium、Firefox、WebKit;
  • 支持无头模式和有头模式;
  • 自动等待页面加载,稳定性较好;
  • 支持截图、录屏、网络拦截;
  • 适合现代前端页面;
  • Python 和 Node.js 都支持。

本文为了便于理解,示例采用 Node.js + Playwright + YAML 配置文件 的方式。


四、项目目录结构

建议按照下面的结构组织项目:

ai-browser-workflow/
├── config/
│   ├── workflow.yaml
│   └── prompts.yaml
├── data/
│   ├── output.csv
│   └── screenshots/
├── src/
│   ├── index.js
│   ├── browser.js
│   ├── ai.js
│   ├── runner.js
│   └── utils.js
├── .env
├── package.json
└── README.md

各文件作用说明:

文件 说明
workflow.yaml 工作流主配置文件,定义要访问的网址、操作步骤和输出字段
prompts.yaml AI 提示词配置文件
index.js 程序入口
browser.js 浏览器初始化与通用操作
ai.js 调用 AI 接口
runner.js 执行工作流步骤
.env 存放 API Key、账号密码等敏感信息
data/output.csv 保存结果
screenshots/ 保存页面截图

五、安装环境

首先创建项目:

mkdir ai-browser-workflow
cd ai-browser-workflow
npm init -y

安装依赖:

npm install playwright dotenv yaml axios cheerio

安装浏览器:

npx playwright install

如果需要保存 CSV,可以安装:

npm install csv-writer

六、环境变量配置

在项目根目录创建 .env 文件:

OPENAI_API_KEY=your_api_key_here
OPENAI_BASE_URL=https://api.openai.com/v1
AI_MODEL=gpt-4o-mini

BROWSER_HEADLESS=false
DEFAULT_TIMEOUT=30000

NOTIFY_WEBHOOK=

说明:

  • OPENAI_API_KEY:你的 AI 服务密钥;
  • OPENAI_BASE_URL:如果使用第三方兼容接口,可以替换为对应地址;
  • AI_MODEL:使用的模型名称;
  • BROWSER_HEADLESS:是否无头运行,调试时建议设为 false
  • DEFAULT_TIMEOUT:页面默认等待时间;
  • NOTIFY_WEBHOOK:用于发送通知的机器人地址,可选。

注意:不要把 .env 文件提交到公开代码仓库。


七、工作流配置文件示例

下面是一个示例配置文件:
目标是打开一个资讯网站,提取文章列表,进入详情页,生成摘要,并保存标题、链接、摘要和发布时间。

创建 config/workflow.yaml

name: "每日行业资讯采集"
description: "自动访问指定网站,采集最新文章并生成中文摘要"
version: "1.0.0"

browser:
  headless: false
  viewport:
    width: 1440
    height: 900
  timeout: 30000

tasks:
  - id: "news_collect"
    name: "采集资讯列表"
    type: "collect"
    url: "https://example.com/news"
    steps:
      - action: "goto"
        target: "https://example.com/news"
        waitUntil: "networkidle"

      - action: "wait"
        selector: ".article-list"

      - action: "extract_list"
        selector: ".article-item"
        fields:
          title:
            selector: ".title"
            attr: "text"
          link:
            selector: "a"
            attr: "href"
          date:
            selector: ".date"
            attr: "text"
        limit: 10

      - action: "visit_each"
        source: "link"
        steps:
          - action: "wait"
            selector: "article"

          - action: "extract_detail"
            fields:
              content:
                selector: "article"
                attr: "text"

          - action: "ai_summarize"
            input: "content"
            prompt: "news_summary"
            output: "summary"

      - action: "save"
        format: "csv"
        path: "data/output.csv"
        fields:
          - title
          - link
          - date
          - summary

这个配置文件把工作流拆成多个步骤:

  1. 打开资讯列表页;
  2. 等待文章列表加载;
  3. 提取文章标题、链接和日期;
  4. 逐个进入文章详情页;
  5. 提取正文;
  6. 调用 AI 生成摘要;
  7. 保存到 CSV 文件。

八、提示词配置文件

创建 config/prompts.yaml

news_summary: |
  你是一名专业的行业研究助理。
  请阅读下面的文章内容,并用中文输出结构化摘要。

  输出格式如下:
  1. 核心观点:用一句话说明文章最重要的信息。
  2. 关键要点:列出3到5条要点。
  3. 影响分析:说明这条信息可能对行业、企业或用户产生什么影响。
  4. 推荐标签:给出3个适合归档的中文标签。

  要求:
  - 不要编造原文没有的信息;
  - 如果原文信息不足,请明确说明;
  - 摘要控制在300字以内。

competitor_analysis: |
  你是一名竞品分析师。
  请根据网页内容提取产品功能、价格、目标用户、卖点和风险点。
  输出为Markdown表格。

form_fill: |
  你是一个表单填写助手。
  请根据用户提供的数据,判断每个字段应该填写什么内容。
  如果字段不确定,请返回“需要人工确认”,不要擅自编造。

把提示词单独抽离出来的好处是:

  • 方便不同任务复用;
  • 方便运营人员修改;
  • 降低代码维护成本;
  • 提示词可以版本化管理。

九、核心代码示例

下面给出一个简化版代码,用于演示配置驱动的浏览器自动化思路。

1. 程序入口:src/index.js

import dotenv from "dotenv";
import fs from "fs";
import YAML from "yaml";
import { runWorkflow } from "./runner.js";

dotenv.config();

const workflowFile = fs.readFileSync("config/workflow.yaml", "utf8");
const promptsFile = fs.readFileSync("config/prompts.yaml", "utf8");

const workflow = YAML.parse(workflowFile);
const prompts = YAML.parse(promptsFile);

runWorkflow(workflow, prompts)
  .then(() => {
    console.log("工作流执行完成");
  })
  .catch((error) => {
    console.error("工作流执行失败:", error);
    process.exit(1);
  });

如果你的项目使用 ES Module,需要在 package.json 中加入:

{
  "type": "module"
}

2. 浏览器模块:src/browser.js

import { chromium } from "playwright";

export async function createBrowser(config = {}) {
  const headless =
    process.env.BROWSER_HEADLESS === "true" ||
    config.headless === true;

  const browser = await chromium.launch({
    headless
  });

  const context = await browser.newContext({
    viewport: config.viewport || {
      width: 1440,
      height: 900
    }
  });

  const page = await context.newPage();

  page.setDefaultTimeout(
    Number(process.env.DEFAULT_TIMEOUT || config.timeout || 30000)
  );

  return {
    browser,
    context,
    page
  };
}

3. AI 调用模块:src/ai.js

import axios from "axios";

export async function callAI(prompt, content) {
  const apiKey = process.env.OPENAI_API_KEY;
  const baseURL = process.env.OPENAI_BASE_URL || "https://api.openai.com/v1";
  const model = process.env.AI_MODEL || "gpt-4o-mini";

  if (!apiKey) {
    throw new Error("缺少 OPENAI_API_KEY");
  }

  const response = await axios.post(
    `${baseURL}/chat/completions`,
    {
      model,
      messages: [
        {
          role: "system",
          content: "你是一个严谨、可靠的浏览器自动化助手。"
        },
        {
          role: "user",
          content: `${prompt}\n\n以下是需要处理的网页内容:\n${content}`
        }
      ],
      temperature: 0.2
    },
    {
      headers: {
        Authorization: `Bearer ${apiKey}`,
        "Content-Type": "application/json"
      }
    }
  );

  return response.data.choices[0].message.content;
}

4. 工作流执行器:src/runner.js

import fs from "fs";
import { createObjectCsvWriter } from "csv-writer";
import { createBrowser } from "./browser.js";
import { callAI } from "./ai.js";

export async function runWorkflow(workflow, prompts) {
  const { browser, page } = await createBrowser(workflow.browser);
  const results = [];

  try {
    for (const task of workflow.tasks) {
      console.log(`开始执行任务:${task.name}`);

      let listData = [];

      for (const step of task.steps) {
        if (step.action === "goto") {
          await page.goto(step.target, {
            waitUntil: step.waitUntil || "load"
          });
        }

        if (step.action === "wait") {
          await page.waitForSelector(step.selector);
        }

        if (step.action === "extract_list") {
          listData = await page.$$eval(
            step.selector,
            (items, fields, limit) => {
              return items.slice(0, limit || items.length).map((item) => {
                const row = {};

                for (const [key, config] of Object.entries(fields)) {
                  const el = item.querySelector(config.selector);

                  if (!el) {
                    row[key] = "";
                    continue;
                  }

                  if (config.attr === "text") {
                    row[key] = el.innerText.trim();
                  } else {
                    row[key] = el.getAttribute(config.attr) || "";
                  }
                }

                return row;
              });
            },
            step.fields,
            step.limit
          );

          console.log(`提取到 ${listData.length} 条数据`);
        }

        if (step.action === "visit_each") {
          for (const item of listData) {
            const url = item[step.source];

            if (!url) continue;

            const absoluteUrl = new URL(url, page.url()).href;
            await page.goto(absoluteUrl, { waitUntil: "networkidle" });

            for (const childStep of step.steps) {
              if (childStep.action === "wait") {
                await page.waitForSelector(childStep.selector);
              }

              if (childStep.action === "extract_detail") {
                for (const [key, config] of Object.entries(childStep.fields)) {
                  const value = await page.$eval(config.selector, (el) =>
                    el.innerText.trim()
                  );

                  item[key] = value;
                }
              }

              if (childStep.action === "ai_summarize") {
                const prompt = prompts[childStep.prompt];
                const input = item[childStep.input] || "";

                item[childStep.output] = await callAI(prompt, input);
              }
            }

            results.push(item);
          }
        }

        if (step.action === "save") {
          await saveCsv(step.path, results, step.fields);
        }
      }
    }
  } finally {
    await browser.close();
  }
}

async function saveCsv(path, rows, fields) {
  if (!rows.length) {
    console.log("没有可保存的数据");
    return;
  }

  const headers = fields.map((field) => ({
    id: field,
    title: field
  }));

  const csvWriter = createObjectCsvWriter({
    path,
    header: headers
  });

  await csvWriter.writeRecords(rows);

  console.log(`结果已保存到:${path}`);
}

十、运行工作流

package.json 中添加脚本:

{
  "scripts": {
    "start": "node src/index.js"
  }
}

运行:

npm run start

如果一切正常,浏览器会自动打开目标网站,采集文章列表,逐个进入详情页,并将 AI 生成的摘要保存到:

data/output.csv

十一、配置文件进阶:表单自动填写

除了采集资讯,还可以让 AI 浏览器自动填写表单。下面是一个示例配置:

name: "客户资料表单填写"
description: "根据客户信息自动填写CRM表单,提交前等待人工确认"

browser:
  headless: false
  timeout: 30000

tasks:
  - id: "crm_form"
    name: "填写客户资料"
    url: "https://example.com/crm/create"
    steps:
      - action: "goto"
        target: "https://example.com/crm/create"
        waitUntil: "networkidle"

      - action: "fill"
        selector: "input[name='company']"
        value: "{{company}}"

      - action: "fill"
        selector: "input[name='contact']"
        value: "{{contact}}"

      - action: "fill"
        selector: "input[name='phone']"
        value: "{{phone}}"

      - action: "select"
        selector: "select[name='source']"
        value: "官网咨询"

      - action: "ai_generate"
        prompt: "form_fill"
        input:
          company: "{{company}}"
          requirement: "{{requirement}}"
        output: "remark"

      - action: "fill"
        selector: "textarea[name='remark']"
        value: "{{remark}}"

      - action: "screenshot"
        path: "data/screenshots/crm_confirm.png"

      - action: "pause"
        message: "请人工确认表单内容,确认无误后再提交"

这里建议使用“人工确认”机制,而不是让脚本直接提交。因为表单数据往往涉及客户资料、合同信息或业务流程,自动提交可能带来误填、重复创建或数据污染的问题。


十二、配置文件进阶:竞品监控

下面是一个竞品官网监控配置示例:

name: "竞品官网监控"
description: "监控竞品价格页和功能页变化,并生成分析报告"

browser:
  headless: true
  timeout: 30000

tasks:
  - id: "competitor_monitor"
    name: "监控竞品页面"
    type: "monitor"
    pages:
      - name: "价格页"
        url: "https://example.com/pricing"
      - name: "功能页"
        url: "https://example.com/features"

    steps:
      - action: "visit_pages"

      - action: "extract_page_text"
        selector: "body"
        output: "page_text"

      - action: "ai_analyze"
        prompt: "competitor_analysis"
        input: "page_text"
        output: "analysis"

      - action: "save"
        format: "markdown"
        path: "data/competitor-report.md"

这类工作流可以每天定时执行一次,把结果保存下来。进一步还可以加入“页面差异对比”,只在页面发生明显变化时通知团队。


十三、如何让工作流更加稳定?

浏览器自动化最常见的问题不是代码写不出来,而是运行不稳定。页面加载慢、弹窗遮挡、登录过期、按钮样式变化、验证码出现,都会导致任务失败。

下面是一些实战建议。

1. 尽量使用稳定选择器

优先使用:

data-testid
name
aria-label
id

少用:

:nth-child()
复杂层级 CSS
动态 class

例如:

await page.click("[data-testid='submit-button']");

比下面这种方式更稳定:

await page.click(".page > div:nth-child(2) > button");

2. 增加重试机制

访问页面、点击按钮、AI 调用都可能失败。建议给关键动作加重试:

async function retry(fn, times = 3) {
  let lastError;

  for (let i = 0; i < times; i++) {
    try {
      return await fn();
    } catch (error) {
      lastError = error;
      await new Promise((resolve) => setTimeout(resolve, 1000));
    }
  }

  throw lastError;
}

3. 保存截图和日志

每一步失败时保存截图,可以快速定位问题:

await page.screenshot({
  path: `data/screenshots/error-${Date.now()}.png`,
  fullPage: true
});

建议日志至少包含:

  • 当前任务名称;
  • 当前步骤;
  • 当前网址;
  • 错误信息;
  • 截图路径;
  • 时间戳。

4. 登录态持久化

很多网站需要登录。如果每次运行都重新登录,容易触发验证码或风控。Playwright 支持保存登录态:

await context.storageState({ path: "auth/state.json" });

下次启动时加载:

const context = await browser.newContext({
  storageState: "auth/state.json"
});

这样可以减少重复登录。

5. 避免过高频率访问

自动化并不意味着无限制抓取。建议:

  • 控制访问频率;
  • 遵守网站 robots 协议;
  • 不采集隐私数据;
  • 不绕过登录、付费墙或风控;
  • 不进行恶意批量请求。

十四、定时运行方案

如果你希望每天早上 9 点自动执行,可以使用 Cron。

在 Linux 服务器执行:

crontab -e

添加:

0 9 * * * cd /path/to/ai-browser-workflow && npm run start >> logs/run.log 2>&1

含义是:每天 9 点进入项目目录,运行工作流,并把日志写入 logs/run.log

如果使用 GitHub Actions,也可以创建:

name: AI Browser Workflow

on:
  schedule:
    - cron: "0 1 * * *"
  workflow_dispatch:

jobs:
  run:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Install dependencies
        run: npm install

      - name: Install Playwright
        run: npx playwright install --with-deps

      - name: Run workflow
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }}
          AI_MODEL: ${{ secrets.AI_MODEL }}
          BROWSER_HEADLESS: true
        run: npm run start

GitHub Actions 适合轻量级、公开网页采集类任务。如果涉及内部系统、企业后台或敏感数据,更建议部署在公司内网服务器上。


十五、结果通知配置

如果希望任务完成后自动推送到企业微信群、飞书或 Telegram,可以在配置中加入通知字段:

notify:
  enabled: true
  type: "webhook"
  url: "${NOTIFY_WEBHOOK}"
  template: |
    今日资讯采集完成:
    - 任务名称:{{workflow.name}}
    - 采集数量:{{count}}
    - 文件路径:{{output}}

通知内容建议简洁明了:

AI浏览器工作流执行完成
任务:每日行业资讯采集
结果:10条
文件:data/output.csv
状态:成功

如果任务失败,则推送:

AI浏览器工作流执行失败
任务:每日行业资讯采集
步骤:extract_list
错误:未找到选择器 .article-list
截图:data/screenshots/error-xxx.png

这样即使你不盯着终端,也能及时知道任务状态。


十六、安全与合规注意事项

AI 浏览器自动化涉及网页访问、账号登录、数据处理和 AI 调用,因此必须注意安全和合规。

1. 保护账号密码

不要把账号密码直接写进代码或配置文件,应该放在 .env 或密钥管理系统中。

错误示例:

username: "admin"
password: "123456"

推荐方式:

username: "${CRM_USERNAME}"
password: "${CRM_PASSWORD}"

2. 谨慎处理个人信息

如果网页内容包含手机号、身份证号、地址、客户信息等个人数据,应避免直接发送给外部 AI 服务。可以先做脱敏处理,例如:

张三,手机号 13812345678

脱敏为:

用户A,手机号 138****5678

3. 避免自动提交高风险操作

以下操作建议保留人工确认:

  • 财务付款;
  • 合同提交;
  • 删除数据;
  • 批量发送消息;
  • 客户状态变更;
  • 订单取消;
  • 权限修改。

AI 可以辅助填写、生成和检查,但不应该在缺少审核的情况下执行不可逆操作。

4. 控制 AI 输出边界

对于摘要、分类、分析类任务,要在提示词中明确:

  • 不允许编造;
  • 不确定就说明不确定;
  • 保留原始链接;
  • 输出结构固定;
  • 关键字段缺失要标记。

这样可以减少 AI 幻觉对业务判断的影响。


十七、常见问题

Q1:页面选择器经常失效怎么办?

优先寻找 data-testididnamearia-label 等稳定属性。如果网站没有稳定属性,可以结合文本定位,例如 Playwright 的:

await page.getByText("提交").click();

也可以在配置中增加备用选择器。


Q2:遇到验证码怎么办?

不要尝试绕过验证码。验证码通常代表网站希望确认是真人访问。建议:

  • 降低访问频率;
  • 使用登录态持久化;
  • 在验证码出现时暂停,等待人工处理;
  • 与网站方申请 API 或数据接口。

Q3:AI 摘要不稳定怎么办?

可以从三方面优化:

  1. 降低 temperature;
  2. 使用结构化提示词;
  3. 限定输出格式和字数。

例如:

请严格按 JSON 输出,不要添加额外解释。
如果字段不存在,填 null。

Q4:采集结果重复怎么办?

可以用链接作为唯一键。保存前判断:

如果 link 已存在,则跳过

也可以使用 SQLite,为链接字段建立唯一索引。


Q5:是否一定要用代码?

不一定。如果你的需求比较简单,也可以使用无代码工具,例如:

  • 浏览器自动化插件;
  • RPA 工具;
  • Zapier;
  • Make;
  • n8n;
  • 飞书自动化;
  • 企业微信机器人。

但如果你需要更强的灵活性、私有化部署和复杂逻辑,代码方式会更可靠。


十八、推荐的落地路径

如果你是第一次做 AI 浏览器工作流,建议按下面的顺序推进:

第一步:从只读任务开始

先做网页采集、摘要、监控,不做自动提交。这样风险最低,也最容易看到效果。

第二步:引入结构化输出

让 AI 输出固定格式,例如 JSON、Markdown 表格、CSV 字段,方便后续保存和分析。

第三步:加入人工确认

对于表单填写、内容发布、客户跟进等任务,让 AI 先生成草稿,再由人工确认执行。

第四步:定时运行

当流程稳定后,再部署到服务器或 GitHub Actions,设置每天自动运行。

第五步:监控和告警

为失败任务添加截图、日志和通知,保证无人值守时也能及时发现问题。

第六步:沉淀配置模板

把常见任务抽象成模板:

  • 资讯采集模板;
  • 竞品监控模板;
  • 表单填写模板;
  • 商品发布模板;
  • 报表生成模板;
  • 客服辅助模板。

以后新增任务时,只需要复制配置文件并修改目标网址、选择器和提示词即可。


十九、完整配置文件汇总

下面给出一份相对完整的工作流配置,便于复制改造。

name: "AI浏览器自动化工作流"
description: "采集网页内容,调用AI生成摘要,并保存结果"
version: "1.0.0"

browser:
  headless: false
  viewport:
    width: 1440
    height: 900
  timeout: 30000

ai:
  model: "${AI_MODEL}"
  temperature: 0.2

output:
  type: "csv"
  path: "data/output.csv"

notify:
  enabled: false
  type: "webhook"
  url: "${NOTIFY_WEBHOOK}"

tasks:
  - id: "daily_news"
    name: "每日资讯采集"
    enabled: true
    url: "https://example.com/news"

    steps:
      - action: "goto"
        target: "https://example.com/news"
        waitUntil: "networkidle"

      - action: "wait"
        selector: ".article-list"

      - action: "extract_list"
        selector: ".article-item"
        limit: 10
        fields:
          title:
            selector: ".title"
            attr: "text"
          link:
            selector: "a"
            attr: "href"
          date:
            selector: ".date"
            attr: "text"

      - action: "visit_each"
        source: "link"
        steps:
          - action: "wait"
            selector: "article"

          - action: "extract_detail"
            fields:
              content:
                selector: "article"
                attr: "text"

          - action: "ai_summarize"
            prompt: "news_summary"
            input: "content"
            output: "summary"

      - action: "save"
        format: "csv"
        path: "data/output.csv"
        fields:
          - title
          - link
          - date
          - summary

二十、总结

AI 浏览器工作流自动化的核心价值,不是简单地“让浏览器自己点来点去”,而是把浏览器、网页、AI、数据存储和通知系统连接起来,形成一套可持续运行的智能流程。

它尤其适合处理以下工作:

  • 重复打开网页;
  • 重复复制粘贴;
  • 重复阅读整理;
  • 重复填写表单;
  • 重复生成报告;
  • 重复监控页面变化。

本文提供的方案采用配置驱动方式,将“任务逻辑”和“执行代码”分离。这样做的好处是:开发者负责维护底层能力,业务人员只需要修改配置文件,就可以创建新的自动化流程。

如果你想快速落地,建议先从一个简单任务开始,例如“每日采集10篇行业资讯并生成摘要”。当这个流程稳定后,再逐步扩展到竞品监控、表单填写、内容发布和运营报表生成。

最后要记住一句话:

AI 浏览器自动化的最佳实践,不是完全替代人,而是让 AI 做重复劳动,让人负责判断、审核和决策。

目录结构
全文