网页自动化测试工具

基于Model Context Protocol (MCP)和人工智能的完整网页自动化解决方案,用于自适应网页抓取。

  • by XoxoCodeur
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 XoxoCodeur/MCP_Web_Automation

使用说明

MCP Web自动化测试技术全栈IA

使用模型上下文协议(MCP)和人工智能进行自适应抓取的完整智能web自动化解决方案。

📋 目录


🎯 概述

该项目实现了一个完整的web自动化解决方案,分为两部分:

  1. MCP服务器 :Exposer 6输出自动化网络(导航、截图、提取链接、填充、点击、获取html)
  2. 智能代理 :LLM代理,能够根据JSON模式从任何网页提取结构化数据

使用的技术

  • 后端 :Python 3.11+
  • 自动化 :剧作家
  • LLM :OpenAI GPT-4o
  • 验证 :Pydantic
  • 协议 :MCP(模型上下文协议)

📦 第1部分:MCP服务器

展示的工具

MCP服务器公开了6种web自动化工具:

输出 描述
navigate 导航到URL
screenshot 捕获屏幕(视口或完整页面)
extract_links 从页面提取所有链接
fill 填写表单字段
click 点击一个项目
get_html 获取完整的后JavaScript HTML

统一响应格式

{
  "ok": true,
  "tool": "navigate",
  "session_id": "sess_abc123",
  "data": {"current_url": "https://example.com", "status": 200},
  "meta": {"ts": "2025-10-30T...", "duration_ms": 342}
}

演示第1部分

python demo/scenario_part1.py

剧本 :

  1. 纳维盖尔·弗斯https://example.com
  2. 截图
  3. 提取所有链接
  4. 导航到第一个外部链接
  5. 再次捕获屏幕

🤖 第2部分:智能抓取代理

功能

代理使用LLM(GPT-4O)来:

  • ✅ 自动分析HTML结构
  • ✅ 确定最佳CSS选择器
  • ✅ 根据JSON模式提取数据
  • ✅ 自动管理分页
  • ✅ 转换器类型(字符串→ 数字,布尔值)
  • ✅ 生成质量报告

配置示例

{
  "url": "https://books.toscrape.com/",
  "schema": {
    "products": [
      {
        "title": "string",
        "price": "number",
        "availability": "string",
        "rating": "string"
      }
    ],
    "metadata": {
      "date_extraction": "datetime",
      "nb_resultats": "number"
    }
  },
  "options": {
    "pagination": true,
    "max_pages": 3
  }
}

演示第2部分

python demo/scenario_part2.py

结果 :具有提取数据+质量报告的结构化JSON文件


🚀 安装

先决条件

  • Python 3.10+
  • 点

步骤

# 1. Cloner le repository
git clone https://github.com/votre-username/MCP_Web_Automation.git
cd MCP_Web_Automation

# 2. Créer un environnement virtuel (recommandé)
python -m venv venv
source venv/bin/activate  # Linux/Mac
# ou
venv\Scripts\activate  # Windows

# 3. Installer les dépendances
pip install -r requirements.txt

# 4. Installer le navigateur Playwright
playwright install chromium

# 5. Configurer l'API OpenAI (pour Partie 2)
cp .env.example .env
# Éditer .env et ajouter votre OPENAI_API_KEY

.env文件

OPENAI_API_KEY=sk-...

💻 使用

MCP服务器(第1部分)

from src.mcp_server import MCPServer

server = MCPServer()
server.run()

刮除剂(第二方)

API Python

from src.scraping_agent import ScrapingAgent, ScrapingConfig
from src.mcp_server import ToolService

agent = ScrapingAgent(
    openai_api_key="sk-...",
    tool_service=ToolService()
)

config = ScrapingConfig(
    url="https://example.com/products",
    schema={
        "products": [{"name": "string", "price": "number"}]
    },
    options={"pagination": True, "max_pages": 5}
)

result = agent.scrape(config)
print(result.data)

命令行界面

python src/scraping_cli.py \
  --config config.json \
  --output results.json

🏗️ 建筑

全球架构

┌─────────────────────────────────────┐
│   Agent de Scraping Intelligent     │
│   (LLM + Orchestration)             │
└─────────────┬───────────────────────┘
              │ Appels directs Python
              ↓
┌─────────────────────────────────────┐
│      ToolService (MCP)              │
│  (navigate, click, get_html, etc.)  │
└─────────────┬───────────────────────┘
              │
              ↓
┌─────────────────────────────────────┐
│         Playwright                  │
│    (Chromium automation)            │
└─────────────────────────────────────┘

为什么不完全MCP(STDIO/SSE)?

对于在同一项目中使用Python工具的Python代理,方法 直接呼叫 最佳:

  • ✅ 开发的简单性
  • ✅ 性能(开销I/O)
  • ✅ 简化状态管理
  • ✅ 如果需要,易于迁移到完整的MCP

看 决策_ PART2.md 有关建筑细节。


📚 文档

技术决策文件

项目结构

MCP_Web_Automation/
├── src/
│   ├── mcp_server.py          # Serveur MCP principal
│   ├── scraping_agent.py      # Agent intelligent de scraping
│   ├── scraping_cli.py        # Interface CLI pour l'agent
│   ├── browser.py             # Gestionnaire de navigateur
│   ├── errors.py              # Gestion d'erreurs
│   ├── logging_conf.py        # Configuration logging
│   └── tools/                 # Outils MCP
│       ├── navigate.py
│       ├── screenshot.py
│       ├── extract_links.py
│       ├── fill.py
│       ├── click.py
│       └── get_html.py
├── demo/
│   ├── scenario_part1.py      # Démo Partie 1
│   └── scenario_part2.py      # Démo Partie 2
├── DECISIONS.md               # Décisions techniques Partie 1
├── DECISIONS_PART2.md         # Décisions techniques Partie 2
├── requirements.txt           # Dépendances Python
├── pyproject.toml             # Configuration projet
└── README.md                  # Ce fichier

🔧 发展

执行测试

# Partie 1
python demo/scenario_part1.py

# Partie 2
python demo/scenario_part2.py

日志记录

JSON日志写在stderr上:

{"level":"INFO","message":"tool_success","tool":"navigate","duration_ms":342}

🚧 已知限制

  1. LLM背景 :HTML截断为50KB
  2. API成本 每页=1个LLM呼叫
  3. 潜伏期 每页2-5秒(与传统刮刀相比)
  4. 分页滚动infini :不支持
  5. 反bot :像亚马逊这样的网站可以阻止

看 决策_ PART2.md 有关详细信息,请参阅“限制”部分。


🔮 未来发展

  • []类似页面的缓存LLM
  • []支持多LLM(克劳德、米斯特拉尔等)
  • []工具 scroll 倒分页infinie
  • []隐形模式(用户代理、代理)
  • []自动身份验证流
  • []速率限制和尊重robots.txt
  • []监控普罗米修斯/Grafana

📄 许可证

该项目是在招聘过程中进行的技术测试。


👤 电影导演

罗宾 -全栈IA技术测试-2025年10月


🙏 致谢