Node.js + Stagehand + Python 部署

适用场景:跨语言自动化项目部署(Node.js 调度 + Stagehand 自动化 + Python 逻辑处理)

支持系统:Linux(Ubuntu 20.04+/CentOS 7+)、Windows 10/11、macOS 12+

目录

  1. ++++环境概述++++
  2. ++++前置依赖准备++++
  3. ++++部署步骤(分模块)++++
    • 3.1 Python 环境部署
    • 3.2 Node.js 环境部署
    • 3.3 Stagehand 工具部署与配置
    • 3.4 跨语言协作配置
  1. ++++启动与验证++++
  2. ++++常见问题排查++++
  3. ++++运维与优化建议++++
  4. ++++附录++++

1. 环境概述

1.1 核心组件及作用

  • Node.js:作为主服务,负责 API 提供、Stagehand 自动化调度、Python 脚本调用。
  • Stagehand:基于 Playwright 的自动化测试工具,专注 UI 自动化流程编排,支持浏览器模拟操作。
  • Python:处理复杂逻辑,包括 AI 模型调用(如通义千问)、数据处理、第三方工具集成。

1.2 核心架构流程

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| graph TD A[用户/外部系统] --> B[Node.js 主服务] B --> C[Stagehand 自动化工具] B --> D[Python 脚本] C --> E[目标 Web 系统] D --> F[AI 模型/数据处理] C --> B D --> B B --> A[返回结果] |

2. 前置依赖准备

2.1 通用要求

  • 网络:服务器需能访问外网(用于下载依赖、调用外部 API)。
  • 权限:Linux/macOS 需 sudo 权限,Windows 需管理员身份操作。
  • 基础工具:Git(版本控制,可选)、对应系统包管理器(apt/yum/Chocolatey/Homebrew)。

2.2 系统专属依赖安装

Linux(以 Ubuntu 为例)

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # 更新系统包 sudo apt update && sudo apt upgrade -y # 安装基础依赖(Python 编译、Node.js 运行依赖) sudo apt install -y python3 python3-pip python3-venv build-essential libssl-dev curl |

Windows
  1. 安装 Python 3.8+,勾选 "Add Python to PATH"。
  2. 安装 Node.js 16+,勾选 "Automatically install the necessary tools"。
macOS

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # 安装 Homebrew(未安装时执行) /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # 安装 Python 和 Node.js brew install python node |

3. 部署步骤(分模块)

3.1 Python 环境部署

3.1.1 版本验证

|--------------------------------------------------------------------------------------------------------------------------------|
| # 验证版本(要求 Python ≥3.8,pip ≥20.0) python3 --version # Windows 直接执行 python --version pip3 --version # Windows 直接执行 pip --version |

3.1.2 虚拟环境配置(推荐)

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # 项目根目录创建虚拟环境 python3 -m venv venv # Windows:python -m venv venv # 激活虚拟环境 # Linux/macOS source venv/bin/activate # Windows(命令提示符) venv\Scripts\activate.bat # Windows(PowerShell) venv\Scripts\Activate.ps1 |

3.1.3 依赖包安装
  1. 项目根目录创建 requirements.txt 文件,内容如下:

|-----------------------------------------------------------------------------------------------------------------------------------------|
| openai>=1.0.0 # 大模型调用(通义千问 OpenAI 兼容) python-dotenv>=1.0.0 # 环境变量加载 playwright>=1.40.0 # 浏览器自动化依赖(可选) json5>=0.9.14 # JSON 解析增强(可选) |

  1. 执行安装命令:

|----------------------------------------------------------------------------|
| pip3 install -r requirements.txt # Windows:pip install -r requirements.txt |

3.1.4 环境变量配置

创建 .env 文件(Python 脚本目录下),配置敏感信息:

|---------------------------------------------------------------------------------------------------------------------|
| OPENAI_API_KEY=你的通义千问API密钥 OPENAI_BASE_URL= 通义千问url MODEL_NAME= 使用大模型 PYTHONPATH=./python_scripts # Python 脚本目录(可选) |

3.2 Node.js 环境部署

3.2.1 版本验证

|--------------------------------------------------------------|
| # 验证版本(要求 Node.js ≥16,npm ≥7.0) node --version npm --version |

3.2.2 项目初始化(新项目)

|-----------------------------------------------------------------------------------------------------------|
| # 创建项目目录并初始化 mkdir node-stagehand-project && cd node-stagehand-project npm init -y # 生成 package.json 文件 |

3.2.3 依赖包安装

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # 安装开发依赖(Stagehand 及 Playwright) npm install --save-dev @playwright/test stagehand-cli # 安装生产依赖(环境变量、HTTP 请求、Python 调用) npm install --save dotenv axios child_process # 安装 Playwright 浏览器二进制文件 npx playwright install |

3.2.4 项目配置
  1. 编辑 package.json,添加启动脚本:

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| { "name": "node-stagehand-python-project", "version": "1.0.0", "scripts": { "start": "node server.js", // 主服务启动 "stagehand:run": "stagehand run", // 执行 Stagehand 任务 "test": "npx playwright test" // Playwright 单独测试(可选) }, "dependencies": { "axios": "^1.6.2", "dotenv": "^16.3.1", "child_process": "^1.0.2" }, "devDependencies": { "@playwright/test": "^1.40.1", "stagehand-cli": "^0.5.0" } } |

  1. 创建 Node.js 环境变量文件 .env(项目根目录):

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| PORT=3000 # 服务端口 NODE_ENV=production # 环境(development/production) PYTHON_SCRIPT_PATH=./python_scripts/login_test.py # Python 脚本路径 HEADFUL=False # 生产环境建议关闭浏览器界面 |

3.3 Stagehand 工具部署与配置

3.3.1 初始化配置

|------------------------------------------|
| # 项目根目录执行,生成配置文件和测试目录 npx stagehand init |

执行后生成 stagehand.config.js(配置文件)和 tests/(自动化脚本目录)。

3.3.2 核心配置(stagehand.config.js)

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| require('dotenv').config(); module.exports = { // Playwright 基础配置 use: { headless: process.env.HEADFUL === 'False', // 无头模式(生产推荐) viewport: { width: 1280, height: 720 }, ignoreHTTPSErrors: true, // 忽略内网服务 HTTPS 错误 }, testDir: './tests', // 自动化脚本目录 workers: process.env.CI ? 1 : undefined, // 并行执行配置 // reporter: 'html', // 生成 HTML 测试报告(可选) }; |

3.3.3 自动化脚本示例(tests/login.automation.js)

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| const { test } = require('@playwright/test'); const { execSync } = require('child_process'); require('dotenv').config(); test('登录自动化(Stagehand + Python 协作)', async ({ page }) => { // 1. 导航到目标登录页面 const loginUrl = 'http://192.*****'; await page.goto(loginUrl, { waitUntil: 'networkidle' }); // 2. 调用 Python 脚本处理核心逻辑 console.log('调用 Python 脚本执行登录逻辑...'); try { const result = execSync(`python3 ${process.env.PYTHON_SCRIPT_PATH}`, { encoding: 'utf-8', env: { ...process.env } // 传递环境变量给 Python }); console.log('Python 脚本执行结果:', result); } catch (error) { console.error('Python 脚本执行失败:', error.message); throw error; } // 3. 验证登录结果 await page.waitForLoadState('networkidle'); const isLoginSuccess = await page.textContent('body').then(text => text.includes('欢迎进入系统') || text.includes('退出登录') ); if (!isLoginSuccess) throw new Error('登录失败:未找到目标文本'); console.log('✅ 登录自动化执行成功!'); }); |

3.4 跨语言协作配置

Node.js 通过 child_process 模块调用 Python 脚本,支持同步 / 异步模式,以下是核心实现:

3.4.1 Node.js 主服务(server.js)

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| require('dotenv').config(); const express = require('express'); const { execSync } = require('child_process'); const app = express(); const PORT = process.env.PORT || 3000; // 解析 JSON 请求体 app.use(express.json()); // API 接口:触发自动化登录 app.post('/api/run-login', (req, res) => { try { console.log('收到自动化登录请求,调用 Python 脚本...'); // 调用 Python 脚本(传递动态参数) const pythonResult = execSync(`python3 {process.env.PYTHON_SCRIPT_PATH}\`, { encoding: 'utf-8', env: { ...process.env, USERNAME: req.body.username \|\| '1234', // 动态用户名 PASSWORD: req.body.password \|\| '1234' // 动态密码 } }); // 返回成功响应 res.status(200).json({ success: true, message: '自动化登录执行完成', result: pythonResult }); } catch (error) { console.error('自动化登录失败:', error.message); res.status(500).json({ success: false, message: '自动化登录执行失败', error: error.message }); } }); // 启动服务 app.listen(PORT, () =\> { console.log(\`Node.js 服务已启动,端口:{PORT}`); console.log(`环境:${process.env.NODE_ENV}`); }); |

3.4.2 Python 脚本接收参数(python_scripts/login_test.py)

修改 Python 脚本,支持从环境变量读取动态参数:

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| import os from dotenv import load_dotenv # 加载环境变量(包含 Node.js 传递的参数) load_dotenv() # 优先使用 Node.js 传递的用户名/密码,默认值兜底 USERNAME = os.getenv("USERNAME", "1234") PASSWORD = os.getenv("PASSWORD", "1234") # 登录指令中使用动态参数 login_prompt = f""" 1. 找到「用户名」输入框(标签或placeholder含"用户名") 2. 输入:{USERNAME} 3. 找到「密码」输入框(标签或placeholder含"密码") 4. 输入:{PASSWORD} 5. 点击「点击登录」按钮 6. 等待页面跳转完成 """ |

4. 启动与验证

4.1 启动顺序

  1. 激活 Python 虚拟环境(若使用)
  2. 启动 Node.js 主服务
  3. 执行 Stagehand 自动化任务(或通过 API 触发)

4.2 启动命令(项目根目录)

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # 1. 激活 Python 虚拟环境(Linux/macOS) source venv/bin/activate # Windows:venv\Scripts\activate.bat # 2. 启动 Node.js 服务 npm start # 3. (可选)直接执行 Stagehand 任务 npm run stagehand:run |

4.3 验证方式

方式 1:API 调用验证(推荐)

使用 curl 或 Postman 调用接口:

|----------------------------------------------------------------------------------------------------------------------|
| curl -X POST http://localhost\ -H "Content-Type: application/json" \ -d '{"username": "1234", "password": "1234"}' |

成功响应示例:

|--------------------------------------------------------------------------|
| { "success": true, "message": "自动化登录执行完成", "result": "✅ 内网登录测试流程全部完成!" } |

方式 2:直接执行 Python 脚本

|------------------------------------------------------------------------------------|
| python3 python_scripts/login_test.py # Windows:python python_scripts/login_test.py |

方式 3:直接执行 Stagehand 任务

|-----------------------|
| npm run stagehand:run |

5. 常见问题排查

5.1 Python 相关问题

  • 问题 :ModuleNotFoundError: No module named 'openai'
    • 解决方案:确保激活虚拟环境,重新执行 pip3 install -r requirements.txt。
  • 问题 :大模型调用超时 / 失败
    • 解决方案:检查 API 密钥和网关地址是否正确,确认服务器能访问外网。
  • 问题 :Playwright 浏览器启动失败
    • 解决方案:执行 playwright install 重新安装浏览器;Linux 需补充依赖:sudo apt install -y libgtk-3-0 libnotify-dev。

5.2 Node.js 相关问题

  • 问题 :Error: Cannot find module 'stagehand-cli'
    • 解决方案:重新执行 npm install,确保依赖安装完整。
  • 问题 :调用 Python 脚本失败(execSync 报错)
    • 解决方案:检查 PYTHON_SCRIPT_PATH 路径是否正确;Linux/macOS 给脚本添加执行权限:chmod +x python_scripts/login_test.py。

5.3 Stagehand 相关问题

  • 问题 :无头模式(headless: true)自动化失败,可视化模式正常
    • 解决方案:添加元素等待逻辑(page.waitForSelector),避免元素未加载完成就操作。
  • 问题 :内网服务无法访问
    • 解决方案:检查服务器防火墙端口是否开放;Stagehand 配置中启用 ignoreHTTPSErrors: true。

6. 运维与优化建议

6.1 生产环境优化

  • Python 进程管理:使用 Supervisor 确保脚本稳定运行

|------------------------------------------------------------------------------------------------|
| sudo apt install -y supervisor # Linux 安装 # 配置文件:/etc/supervisor/conf.d/python-automation.conf |

  • Node.js 进程管理:使用 PM2 实现自动重启和日志记录

|----------------------------------------------------------------------------------------------|
| npm install -g pm2 pm2 start server.js --name "node-automation-service" pm2 startup # 设置开机自启 |

  • Stagehand 优化:生产环境启用无头模式,减少资源占用;合理设置并行 workers 数量。

6.2 日志与监控

  • Python 日志:添加文件日志输出

|----------------------------------------------------------------------------------------------------------------------|
| import logging logging.basicConfig(filename='python_automation.log', level=logging.INFO) logging.info('登录自动化任务开始执行') |

  • Node.js 日志:安装 winston 工具管理日志

|---------------------|
| npm install winston |

  • 监控方案:使用 Prometheus + Grafana 监控服务状态;配置告警机制(邮件 / 钉钉)。

6.3 安全建议

  • 敏感信息(API 密钥、密码)统一存储在 .env 文件,禁止硬编码。
  • 限制 .env 文件权限:Linux/macOS 执行 chmod 600 .env。
  • 定期更新依赖包:pip3 install --upgrade -r requirements.txt、npm update。

7. 附录

7.1 关键依赖版本参考

|------------|-----------|--------------------|
| 组件 | 推荐版本 | 备注 |
| Node.js | 16.x/18.x | 稳定版即可 |
| Python | 3.8+/3.9+ | 避免 3.7 及以下版本 |
| Stagehand | ≥0.5.0 | 需与 Playwright 版本兼容 |
| Playwright | ≥1.40.0 | 匹配浏览器版本 |

7.2 常用命令汇总

|-----------------|---------------------------------------|
| 操作 | 命令 |
| 安装 Python 依赖 | pip3 install -r requirements.txt |
| 安装 Node.js 依赖 | npm install |
| 启动 Node.js 服务 | npm start |
| 执行 Stagehand 任务 | npm run stagehand:run |
| PM2 重启 Node 服务 | pm2 restart node-automation-service |
| 查看 Python 虚拟环境 | source venv/bin/activate(Linux/macOS) |

相关推荐
YAY_tyy1 小时前
2025 最新版 Node.js 下载安装及环境配置教程
前端·node.js·教程·工具配置
爱的叹息1 小时前
Node.js 所有主要版本的发布时间、稳定版本(Stable)和长期支持版本(LTS) 的整理
node.js
一勺菠萝丶1 小时前
MacBook 上如何正确安装 nvm 和 Node.js(新手必看)
node.js
仰望尾迹云1 小时前
Chandra AI与Node.js集成:实时聊天应用开发全攻略
node.js·大语言模型·ai聊天·实时对话
B站计算机毕业设计超人1 小时前
计算机毕业设计Django+Vue.js音乐推荐系统 音乐可视化 大数据毕业设计 (源码+文档+PPT+讲解)
大数据·vue.js·hadoop·python·spark·django·课程设计
王码码20351 小时前
Flutter for OpenHarmony:socket_io_client 实时通信的事实标准(Node.js 后端的最佳拍档) 深度解析与鸿蒙适配指南
android·flutter·ui·华为·node.js·harmonyos
百思可瑞教育1 小时前
Vue 前端与 Node.js 后端文件上传与处理实现
前端·javascript·vue.js·前端框架·node.js·ecmascript·百思可瑞教育
B站_计算机毕业设计之家1 小时前
电影知识图谱推荐问答系统 | Python Django系统 Neo4j MySQL Echarts 协同过滤 大数据 人工智能 毕业设计源码(建议收藏)✅
人工智能·python·机器学习·django·毕业设计·echarts·知识图谱
计算机专业码农一枚1 小时前
Python-flask框架基于推荐算法的在线课程推荐系统设计与实现-Pycharm django
python·flask·推荐算法