python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Node.js+Stagehand+Python部署

Node.js + Stagehand + Python跨语言自动化项目部署流程

作者:遥遥江上月

Stagehand是Browserbase出品的浏览器代理SDK,面向浏览器自动化场景,同时支持TypeScript、Python和Go,这篇文章主要介绍了Node.js + Stagehand + Python跨语言自动化项目部署流程的相关资料,需要的朋友可以参考下

1. 环境概述

1.1 核心组件及作用

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 通用要求

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

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 依赖包安装

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 项目配置

{
  "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"
  }
}
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 启动顺序

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 相关问题

5.2 Node.js 相关问题

5.3 Stagehand 相关问题

6. 运维与优化建议

6.1 生产环境优化

sudo apt install -y supervisor  # Linux 安装
# 配置文件:/etc/supervisor/conf.d/python-automation.conf
npm install -g pm2
pm2 start server.js --name "node-automation-service"
pm2 startup  # 设置开机自启

6.2 日志与监控

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

6.3 安全建议

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部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文