使用说明
LA数据机器人 — Playwright + MCP AI代理 + Flask API
这个项目实现了对洛杉矶开放数据门户(https://data.lacity.org)的自动化搜索,并提取数据集结果。
它包括:
- 核心要求: 一个确定性的Playwright“机器人”,它能打开网站、进行搜索并打印出清晰的结果。
- 可选挑战1(奖励): 一个基于实时页面上下文(通过assistant提供)构建步骤计划的AI驱动规划器(Gemini) MCP(多种含义,具体需根据上下文确定) (模型上下文协议)使用 Playwright MCP 服务器。
- 可选挑战2(API + 前端): 一个最小化的Flask API和前端,用于暴露一个
/searchREST 端点以及一个简单的 HTML 界面,用于用户输入和数据集显示。
🧩 项目结构
.
├─ main.py # Deterministic Playwright automation
├─ agent_cli.py # AI-driven CLI for natural-language goals
├─ ai_agent.py # Planning + execution helpers (LLM + MCP integration)
├─ mcp_client.py # Minimal MCP client wrapper
├─ mcp_server.py # Playwright MCP server (rich page snapshot + tools)
├─ app.py # Flask API + UI layer (integrates with agent_cli.py)
├─ requirements.txt
├─ .gitignore
└─ debug/ # Debug artifacts (screenshots, HTML dumps)
---
先决条件
- 建议使用 Python 3.10+
- Playwright 管理 Chrome/Chromium
- 如果需要运行,需提供一个Google Gemini API密钥 人工智能规划器 路径
设置
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
# Install Playwright browsers (first time only)
python -m playwright install
Create a .env file if you’ll use the AI planner (Gemini):
# .env
GEMINI_API_KEY=your_gemini_key_here
# or
GOOGLE_API_KEY=your_gemini_key_here
MCP server env (used by AI planner):
# Start the MCP server via python mcp_server.py
MCP_PLAYWRIGHT_CMD=python3
MCP_PLAYWRIGHT_ARGS=mcp_server.py
# See MCP browser UI if desired:
MCP_HEADLESS=0 # default is headless (unset or 1)
如何跑步
A) 必备核心(确定性)
这个脚本执行了一个标准的导航→输入→点击/按下→提取流程,并打印出结果。 运行 python main.py
它的功能是: 1. 打开 https://data.lacity.org 2. 在搜索框中输入一个固定的查询(例如,“总务部”) 3. 点击搜索按钮(或按回车键) 4. 等待结果并打印第一个数据集的标题和链接 5. 在遇到问题时,它会保存截图和HTML转储以用于调试/
B) 可选挑战1(人工智能+多智能体协作规划)
这条路径利用MCP服务器为大型语言模型(Gemini)提供实时页面上下文,以便其规划步骤(等待、填写、点击、提取),然后执行这些步骤。
- 通过环境变量启动MCP服务器(代理将自动启动它):
如果你在 .env 文件或 shell 中设置了环境变量,则无需手动操作:
MCP_PLAYWRIGHT_CMD=python3 MCP_PLAYWRIGHT_ARGS=mcp_server.py 翻译为中文是:“MCP_PLAYWRIGHT 参数为 mcp_server.py”
自然目标示例
运行 python agent_cli.py --goal "我想了解洛杉矶的犯罪情况" --debug
• The agent keywordizes your goal (e.g., “crimes LA”)
• It asks the LLM to produce the 5-step plan using the right selectors:
• input.react-autosuggest__input[placeholder='Search for Data']
• a[href*='/d/']
• It executes the plan step-by-step and prints the first hit.
• It also navigates to /browse?... if needed and prints up to 10 dataset results.
C) 可选挑战2(Flask Web API + 前端)
这个路径提供了一个最小化的Flask应用程序,该应用程序暴露了一个 /search REST 端点和一个用于用户交互的简单 HTML 界面。
- 使用以下方式启动应用:
python app.py - 这个(或“该”)
/search端点接受一个查询参数,并以JSON格式返回数据集结果。 - 附带的HTML前端界面允许用户输入搜索查询,提交查询,并动态查看数据集结果。
- 搜索进行时会显示一个加载指示器。
- 这个Flask应用与(另一个/相同的)进行了集成
run_goal来自逻辑(或:逻辑方面的)agent_cli.py执行搜索和提取操作。
—
⚙️ 配置说明
-
关键词化:
agent_cli.py将自然句子转换为简洁的查询(例如,“洛杉矶犯罪”),并同时用于大型语言模型(LLM)的规划和/browse备用方案。 -
MCP 服务器(
mcp_server.py):
提供浏览器控制和页面交互的工具:playwright_navigateplaywright_snapshot(丰富快照:角色、属性、选择器候选)playwright_clickplaywright_fill(清空并稍作延迟后输入,以触发SPA监听器)
-
鲁棒性:
包括超时和回退机制:- 等待
DOMContentLoaded - 直接导航至
/browse?q=...如果搜索结果不可见 - 在失败时保存调试转储
- 等待
-
调试产物:
在出现错误或超时时,截图和HTML转储会自动保存在debug/目录。
🔧 故障排除
🟡 来自MCP的快照错误
如果遇到快照错误,系统将回退到一个可访问的快照并继续运行。
确保环境变量设置正确 MCP_PLAYWRIGHT_CMD 和 MCP_PLAYWRIGHT_ARGS 设置正确。
你可以使用以下方式运行:
MCP_HEADLESS=0