59 lines
2.6 KiB
Python
59 lines
2.6 KiB
Python
import asyncio
|
||
import os
|
||
from dotenv import load_dotenv
|
||
from mcp import ClientSession, StdioServerParameters
|
||
from mcp.client.stdio import stdio_client
|
||
|
||
# 加载当前目录下的 .env 文件
|
||
load_dotenv()
|
||
|
||
async def run_browser_automation():
|
||
print("⏳ 正在启动 Page Agent MCP 服务器...")
|
||
print("👉 如果你没有打开浏览器,系统会自动帮你唤起默认浏览器!\n")
|
||
|
||
# 1. 配置 MCP 服务端
|
||
# 它会自动读取当前系统的 PATH,调用 npx 启动 @page-agent/mcp
|
||
server_params = StdioServerParameters(
|
||
command="npx",
|
||
args=["-y", "@page-agent/mcp"],
|
||
env={
|
||
**os.environ,
|
||
"LLM_BASE_URL": os.getenv("LLM_BASE_URL", ""),
|
||
"LLM_API_KEY": os.getenv("LLM_API_KEY", ""),
|
||
"LLM_MODEL_NAME": os.getenv("LLM_MODEL_NAME", "qwen-plus")
|
||
}
|
||
)
|
||
|
||
# 2. 通过标准输入输出(Stdio)连接到插件的 MCP 服务
|
||
async with stdio_client(server_params) as (read, write):
|
||
async with ClientSession(read, write) as session:
|
||
# 初始化握手
|
||
await session.initialize()
|
||
|
||
print("✅ 成功连接到了 MCP 服务端!正在等待浏览器插件握手...")
|
||
|
||
# 轮询等待浏览器插件连上来
|
||
for _ in range(15):
|
||
status_res = await session.call_tool("get_status", {})
|
||
if '"connected": true' in status_res.content[0].text:
|
||
break
|
||
await asyncio.sleep(1)
|
||
else:
|
||
print("❌ 浏览器插件连接超时!请确保 Chrome 浏览器正常运行,并启用了 Page Agent 插件。")
|
||
return
|
||
|
||
task_prompt = "请你先导航到 https://preview.pro.ant.design/list/table-list/ 页面,然后使用自定义工具 scrapeErpOrdersTool 来抓取当前页面的所有分页表格数据。抓取完成后,请告诉我一共抓取到了多少条数据,并列出前三条作为示例。"
|
||
print(f"🤖 派发自然语言任务: 【{task_prompt}】\n")
|
||
print("👁️🗨️ 正在观测浏览器执行... (你可以切回浏览器看着它自动操作,大概需要几十秒)")
|
||
|
||
# 调用 MCP 的 execute_task 工具
|
||
result = await session.call_tool("execute_task", {
|
||
"task": task_prompt
|
||
})
|
||
|
||
print("\n🎉 浏览器任务执行完毕,大模型返回的最终结果是:")
|
||
print(result.content[0].text)
|
||
|
||
if __name__ == "__main__":
|
||
asyncio.run(run_browser_automation())
|