数据搜索自动化工具

一个自动化搜索洛杉矶开放数据门户并提取数据集结果的工具,结合了Playwright自动化、AI规划和Flask API。

  • by Neeraj0704
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Neeraj0704/Playwright-MCP

使用说明

LA数据机器人 — Playwright + MCP AI代理 + Flask API

这个项目实现了对洛杉矶开放数据门户(https://data.lacity.org)的自动化搜索,并提取数据集结果。

它包括:

  • 核心要求: 一个确定性的Playwright“机器人”,它能打开网站、进行搜索并打印出清晰的结果。
  • 可选挑战1(奖励): 一个基于实时页面上下文(通过assistant提供)构建步骤计划的AI驱动规划器(Gemini) MCP(多种含义,具体需根据上下文确定) (模型上下文协议)使用 Playwright MCP 服务器。
  • 可选挑战2(API + 前端): 一个最小化的Flask API和前端,用于暴露一个 /search REST 端点以及一个简单的 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)提供实时页面上下文,以便其规划步骤(等待、填写、点击、提取),然后执行这些步骤。

  1. 通过环境变量启动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_navigate
    • playwright_snapshot (丰富快照:角色、属性、选择器候选)
    • playwright_click
    • playwright_fill (清空并稍作延迟后输入,以触发SPA监听器)
  • 鲁棒性:
    包括超时和回退机制:

    • 等待 DOMContentLoaded
    • 直接导航至 /browse?q=... 如果搜索结果不可见
    • 在失败时保存调试转储
  • 调试产物:
    在出现错误或超时时,截图和HTML转储会自动保存在 debug/ 目录。


🔧 故障排除

🟡 来自MCP的快照错误

如果遇到快照错误,系统将回退到一个可访问的快照并继续运行。
确保环境变量设置正确 MCP_PLAYWRIGHT_CMD 和 MCP_PLAYWRIGHT_ARGS 设置正确。
你可以使用以下方式运行:

MCP_HEADLESS=0