浏览器自动化服务器

一个基于Selenium WebDriver的无浏览器自动化服务器,通过连接browserless服务提供可扩展的容器化部署方案。

  • by fbettag
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 fbettag/selenium-mcp

使用说明

Selenium MCP服务器

一种模型上下文协议(MCP)服务器,使用连接到无浏览器服务的Selenium WebDriver提供浏览器自动化功能。此服务器在没有本地浏览器的情况下运行,通过TCP连接到无浏览器,以实现可扩展的容器化部署。

特性

  • 浏览器自动化:导航到URL,与元素交互,执行JavaScript
  • 无浏览器集成:通过WebDriver协议连接到无浏览器服务
  • 异步Python:使用FastMCP构建,用于高性能异步操作
  • 集装箱准备就绪:基于Alpine的Docker镜像,没有本地浏览器
  • 会话管理:根据MCP上下文自动处理会话

快速开始

先决条件

  • Python 3.13+
  • 无浏览器服务正在运行(本地或远程)
  • UV包管理器(推荐)

安装

# Clone the repository
git clone <your-repo-url>
cd selenium-mcp-server

# Install with UV
uv sync

# Or with pip
pip install -e .

环境设置

设置无浏览器服务URL和可选身份验证令牌:

export BROWSERLESS_URL=http://localhost:3000  # Local browserless
export BROWSERLESS_URL=http://browserless:3000  # Kubernetes service

# Optional: Set authentication token if browserless requires it
export BROWSERLESS_TOKEN=your-bearer-token-here

运行服务器

# With UV
uv run selenium-mcp

# Or directly
python -m selenium_mcp.server

Claude桌面设置

添加到您的Claude Desktop配置中:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
视窗: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "selenium": {
      "command": "uv",
      "args": ["run", "selenium-mcp"],
      "env": {
        "BROWSERLESS_URL": "http://localhost:3000",
        "BROWSERLESS_TOKEN": "your-bearer-token-here"
      }
    }
  }
}

可用工具

导航到URL

navigate_to_url({
  "url": "https://example.com"
})

查找元素

find_element({
  "selector": ".button-primary",
  "by": "css"  # css, xpath, id, name, class_name, tag_name, link_text, partial_link_text
})

单击元素

click_element({
  "selector": "#submit-button",
  "by": "id"
})

执行JavaScript

execute_javascript({
  "script": "return document.title;"
})

屏幕截图

take_screenshot({})

获取页面信息

get_page_info({})

关闭浏览器

close_browser({})

Docker部署

塑造形象

docker build -t selenium-mcp-server .

使用Docker Compose运行

version: '3.8'
services:
  browserless:
    image: browserless/chrome:latest
    ports:
      - "3000:3000"
    environment:
      - CONNECTION_TIMEOUT=60000
      - MAX_CONCURRENT_SESSIONS=10

  selenium-mcp:
    image: selenium-mcp-server:latest
    environment:
      - BROWSERLESS_URL=http://browserless:3000
      - BROWSERLESS_TOKEN=${BROWSERLESS_TOKEN:-}
    ports:
      - "8000:8000"
    depends_on:
      - browserless

Kubernetes部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: selenium-mcp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: selenium-mcp
  template:
    metadata:
      labels:
        app: selenium-mcp
    spec:
      containers:
      - name: selenium-mcp
        image: selenium-mcp-server:latest
        env:
        - name: BROWSERLESS_URL
          value: "http://browserless-service:3000"
        - name: BROWSERLESS_TOKEN
          valueFrom:
            secretKeyRef:
              name: browserless-secrets
              key: token
        ports:
        - containerPort: 8000
        resources:
          requests:
            memory: "128Mi"
            cpu: "100m"
          limits:
            memory: "256Mi"
            cpu: "200m"

---
apiVersion: v1
kind: Service
metadata:
  name: browserless-service
spec:
  selector:
    app: browserless
  ports:
  - port: 3000
    targetPort: 3000

发展

虚拟环境

# Create virtual environment
uv venv .venv

# Activate on Unix/macOS
source .venv/bin/activate

# Activate on Windows
.venv\\Scripts\\activate

# Install dependencies
uv sync

测试

# Run tests
uv run pytest

# Start local browserless for testing
docker run -p 3000:3000 browserless/chrome:latest

# Test the server
BROWSERLESS_URL=http://localhost:3000 uv run selenium-mcp

装订和格式化

# Format code
uv run black src/

# Lint code
uv run ruff check src/

# Type checking
uv run mypy src/

GitHub CI/CD管道

该存储库包括一个GitHub Actions工作流,该工作流:

  1. 测试:启动无浏览器容器并运行测试
  2. 建筑:使用UV创建Docker映像
  3. 推动:部署到主分支上的容器注册表

看 .github/workflows/ci.yml 了解详情。

环境变量

变量 描述 默认值
BROWSERLESS_URL 无浏览器服务URL 必填
BROWSERLESS_TOKEN 用于无浏览器身份验证的可选承载令牌 空
PYTHONPATH Python导入路径 /app/src
PYTHONUNBUFFERED 无缓冲Python输出 1

无浏览器配置

此MCP服务器需要无浏览器服务。推荐的无浏览器配置:

docker run -p 3000:3000 \
  -e CONNECTION_TIMEOUT=60000 \
  -e MAX_CONCURRENT_SESSIONS=10 \
  -e DEFAULT_BLOCK_ADS=true \
  browserless/chrome:latest

性能注意事项

  • 会话管理:每个MCP上下文都有自己的浏览器会话
  • 连接池:无浏览器处理多个并发会话
  • 资源限制:在Kubernetes中设置适当的内存/cpu限制
  • 超时:根据用例配置无浏览器超时

故障排除

常见问题

  1. 连接被拒绝:确保无浏览器正在运行且可访问
  2. 认证失败:检查是否 BROWSERLESS_TOKEN 是必需的,并且设置正确
  3. 会话超时:增加无浏览器超时设置
  4. 未找到元素:在脚本中使用适当的等待策略

日志

通过设置环境变量启用调试日志记录:

export LOG_LEVEL=DEBUG
export BROWSERLESS_DEBUG=true

许可证

MIT许可证-有关详细信息,请参阅许可证文件。

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 通过测试进行更改
  4. 提交拉取请求

支持

有关问题和疑问,请打开GitHub问题或查看无浏览器文档。