Node.js + Stagehand + Python跨语言自动化项目部署流程
作者:遥遥江上月
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
- 安装 Python 3.8+,勾选 “Add Python to PATH”。
- 安装 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 依赖包安装
- 项目根目录创建 requirements.txt 文件,内容如下:
openai>=1.0.0 # 大模型调用(通义千问 OpenAI 兼容) python-dotenv>=1.0.0 # 环境变量加载 playwright>=1.40.0 # 浏览器自动化依赖(可选) json5>=0.9.14 # JSON 解析增强(可选)
- 执行安装命令:
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 项目配置
- 编辑 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"
}
}- 创建 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 启动顺序
- 激活 Python 虚拟环境(若使用)
- 启动 Node.js 主服务
- 执行 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) |
总结
到此这篇关于Node.js+Stagehand+Python跨语言自动化项目部署流程的文章就介绍到这了,更多相关Node.js+Stagehand+Python部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
