work_flow.md 9.0 KB

有搜索关键词任务给定 2000个关键词,执行浏览器自动化搜索引擎来搜索,然后任务保存在每个目录中,执行下一个搜索任务。另外还有链接提取的任务,例如 2000个搜索结果里面,有一些链接需要提取或解析该链接文章页面,最后还有一个页面转换任务,也就是用工具把页面转换成markdown、docx 。我打算用 celery flower 来提交和执行各个任务,worker 运行和保存结果。不过我发现 flower 似乎只能监控任务状况,如果我想在用户页面查看结果,或者想知道 2000个中目前执行到了哪一个,或者单独重试某一个搜索任务,或者暂时取消某一个搜索任务。。。我发现celery flower worker 的方式支持很有限,而且我还要自定义 UI 前端页面来展示和查看处理情况。后面我听建议说可以用 airflow ,说不定是个好选择,不过我又发现 airflow 在Windows支持并不是很好。如果我想在Windows,并且现在各个代码已经基本完成,就差后面的用户页面监控、查看、重试、暂停等操作不友好。我想问除了 airflow是否还有别的工具能够支持?因为我不想写太多代码了

我现在有一个浏览器自动化任务项目,用 DrisstionPage 进行驱动浏览器。现在已经完成了所有代码,不过各个代码函数方法都是单一职责的,并没有复杂的调度和记录重试、监控、中断继续等等功能。因为自动化场景中比较复杂,稍有错误便无法继续进行: 有访问主页(是否成功访问、是否弹出验证码)、输入关键词(是否能找到输入框)、回车搜索(是否有验证码)、将搜索结果解析并保存到本地(是否能解析成功标题、内容、网址等信息,是否存在下一页、如不存在,任务可标记为完成)、点击下一页、解析并保存到本地(是否能解析成功标题、内容、网址等信息,是否还有下一页)。。。

我看到任何一个步骤出错都可能导致失败,并且程序的进度保存、避免出错后重头再来、监控进度、是否重试、失败的原因、在哪一步导致失败,需要的程序逻辑非常繁杂,我认为手写全部代码不是好选择。我看了 airflow 、prefect V3 、luigi 等框架,发现他们可以记录工作流,但是不确定他们是否是 RPA 自动化爬虫任务的最佳选择框架? 我试了 prefect v3 版本,发现它无法在控制台查看和记录 task 输入输出,只能手动从代码中调用 task result ,似乎不够好用。 我试了 aireflow 发现它仅支持 Linux 系统, 无法很好支持 Windows 直接运行。 你能否给我推荐哪些最佳开源工具框架,给我最佳方案


核心推荐结论

根据你的浏览器自动化核心需求复杂流程管理要求,分层次推荐方案如下:


一、首选方案:Prefect 2.x + DrissionPage 增强层

推荐指数:★★★★★

适用场景

  • 需要精细控制浏览器操作(验证码识别、反爬策略)
  • 已有Python代码基础,追求工程化可维护性
  • 未来可能扩展分布式爬虫/RPA集群

优势组合

# 典型工作流结构示例
from prefect import flow, task
from drissionpage import ChromiumPage

@task(retries=3, retry_delay=30)
def safe_search(page: ChromiumPage, keyword: str):
    try:
        if captcha_detected(page):
            auto_solve_captcha(page)  # 集成第三方验证码服务
        page.ele('#search-box').input(keyword)
        page.wait.ele_displayed('#results', timeout=10)
    except ElementNotFound as e:
        log_error(f"元素定位失败: {e.selector}")
        raise
    except PageTimeout:
        reset_proxy()  # 自动切换代理IP
        raise

@flow(persist_result=True, result_serializer="json")
def main_flow(keywords: list):
    with ChromiumPage() as page:
        for keyword in keywords:
            safe_search(page, keyword)
            process_results(page)

核心优势

  1. 错误恢复能力

    • 内置指数退避重试策略
    • 自动保存失败上下文(包括DOM快照、控制台日志)
    • 精准定位失败步骤(如"search_box未找到")
  2. 分布式支持

    # 部署到Kubernetes集群
    prefect worker start -t kubernetes --pool 'browser-workers'
    
  3. 监控集成Prefect Dashboard


二、次选方案:n8n 作为协调中枢

推荐指数:★★★☆☆

适用场景

  • 需要频繁对接企业微信/钉钉等办公系统
  • 业务流程包含人工审核节点
  • 非技术成员需要参与流程设计

典型架构

graph LR
    A[用户提交任务] --> B(n8n Webhook)
    B --> C{任务类型?}
    C -->|自动化采集| D[调用Prefect API]
    C -->|人工处理| E[发送审批表单]
    D --> F[将结果写入数据库]
    E --> F
    F --> G[同步到Notion知识库]

关键配置

// n8n 的 Prefect 调用节点配置
{
  "nodes": [
    {
      "name": "触发采集任务",
      "type": "n8n-nodes-httpRequest.post",
      "parameters": {
        "url": "https://prefect-server/api/flows/run",
        "headers": {
          "Authorization": "Bearer {{PREFFECT_API_KEY}}"
        },
        "body": {
          "task_id": "{{$json.task_id}}",
          "keywords": "{{$json.keywords}}"
        }
      }
    }
  ]
}

三、特殊场景推荐工具

1. 大规模RPA集群:Robocorp

  • 云原生任务队列
  • 自动屏幕录像回放
  • 企业级权限管理

    from robocorp import browser
    from robocorp.tasks import task
    
    @task
    def extract_data():
       page = browser.page()
       page.click("text=Next Page")  # 自带智能等待
       save_checkpoint(page.url)  # 自动状态持久化
    

2. 快速原型开发:Playwright + Pytest

   # 结合测试框架实现自愈式脚本
   def test_search(page: Page):
       try:
           page.goto("https://target.com")
           expect(page).to_have_title("Search Page")
           page.fill("#input", "keyword")
           with page.expect_navigation():
               page.click("#submit")
           assert "results" in page.content()
       except AssertionError:
           page.screenshot(path="debug.png")
           send_alert_to_slack()

四、决策树辅助选择

graph TD
    A[项目核心是否为浏览器操作?] -->|是| B{需要复杂错误恢复?}
    A -->|否| C[首选n8n]
    B -->|是| D[Prefect+DrissionPage]
    B -->|否| E{是否需要对接多个外部系统?}
    E -->|是| C
    E -->|否| F[纯Playwright脚本]

五、推荐技术栈组合

需求维度 推荐工具链 关键能力
核心浏览器操作 DrissionPage/Playwright + Prefect 元素级错误恢复、反爬对抗、验证码集成
外围系统集成 n8n 低代码连接300+应用、人工审批流
部署运维 Docker + Kubernetes 容器化隔离、自动扩缩容
监控报警 Grafana + Sentry 实时性能指标跟踪、错误堆栈分析
数据存储 PostgreSQL + MinIO 结构化数据存储、网页快照归档

六、迁移成本对比

方案 学习曲线 改造成本 长期维护性
纯Prefect
Prefect+n8n混合
纯n8n方案
Robocorp全家桶

最终建议:基于你描述的复杂浏览器交互场景已有Python代码基础,推荐采用 Prefect 2.x 作为核心调度框架,保持现有DrissionPage代码结构,通过以下步骤增强:

  1. 本周内

    pip install prefect>=2.0
    # 将现有函数包装为@task
    
  2. 本月内

    • 添加SQLite状态存储
    • 集成Prometheus监控
    • 实现验证码服务调用
  3. 中长期

    • 构建管理控制台
    • 部署到Kubernetes集群
    • 开发自动代理切换模块

保留n8n作为可选扩展方案,当需要连接企业级应用时再引入,避免过早增加架构复杂度。

可选参考工具

34k⭐ https://www.dongaigc.com/p/apache/airflow/related