自动化测试任务或者定义AI AGENT(智能体)任务,通过使用它可以操作浏览器来执行特定操作,如访问网页、单击按钮、提取网页信息等。

在软件开发与运维的日常工作中,浏览器自动化早已不是新鲜事。从早期的 Selenium 到后来的 Puppeteer、Playwright,我们一直在寻找更高效、更智能的方式来驱动浏览器完成重复性操作。而随着 AI 与大模型的兴起,AI Agent(智能体) 的概念被引入到浏览器自动化中,让“自动化测试任务”从“写死的脚本”进化成“能自主决策的助手”。本文将带你从基础概念出发,一步步深入到如何定义和运行一个 AI Agent 驱动的浏览器任务,并附上完整可运行的代码示例。—## 一、基础概念:浏览器自动化与 AI Agent### 1. 什么是浏览器自动化?浏览器自动化是指通过程序代码模拟用户操作浏览器的行为,例如:- 打开网页- 填写表单- 点击按钮- 提取页面数据- 执行 JavaScript 逻辑传统的自动化测试工具(如 Selenium WebDriver)通过 WebDriver 协议控制真实浏览器,而现代工具(如 Playwright)则直接通过 DevTools 协议,性能更优、更稳定。### 2. 什么是 AI Agent?AI Agent(智能体)是一个能感知环境、做出决策并执行动作的实体。在浏览器自动化的场景下,AI Agent 可以:- 理解自然语言指令(例如“打开百度,搜索 Python,并提取第一条结果的标题”)- 将指令拆解为多个子任务(导航、点击、提取)- 通过调用浏览器操作 API 完成序列化动作- 根据反馈调整策略(如果页面加载失败,则重试)简单来说,AI Agent 让浏览器自动化从“硬编码”走向“智能决策”。—## 二、环境准备与工具选型本文我们使用以下技术栈:- Python 3.9+- Playwright:现代化的浏览器自动化库,支持 Chromium、Firefox、WebKit- OpenAI API(或本地模型):用于自然语言理解和任务规划(本文以 OpenAI 为例,但你可以替换为任何 LLM)安装依赖:bashpip install playwright openaiplaywright install chromium # 安装 Chromium 内核### 项目结构:browser_agent/├── agent.py # AI Agent 核心逻辑├── browser_ops.py # 浏览器操作封装└── main.py # 入口示例—## 三、第一步:用 Playwright 执行基础浏览器操作我们先抛开 AI,直接用 Playwright 写一个最简单的自动化脚本:打开一个网页,点击按钮,提取文本。python# browser_ops.pyfrom playwright.sync_api import sync_playwrightdef run_basic_task(): with sync_playwright() as p: # 启动浏览器(headless=False 可显示界面) browser = p.chromium.launch(headless=True) page = browser.new_page() # 1. 访问网页 page.goto("https://example.com") # 2. 提取标题 title = page.title() print(f"页面标题: {title}") # 3. 点击按钮(示例:假设存在 id=submit 的按钮) # 注意:example.com 没有按钮,这里仅作演示 # page.click("#submit") # 4. 提取文本 heading = page.text_content("h1") print(f"H1 内容: {heading}") browser.close()if __name__ == "__main__": run_basic_task()这段代码演示了最核心的三个操作:goto(访问)、click(点击)、text_content(提取)。但它是固定的,无法根据自然语言指令动态变化。—## 四、第二步:引入 AI Agent 进行任务规划现在,我们让 AI 来“读懂”用户的意图,并自动生成操作序列。核心思路:1. 将用户指令(自然语言)发送给 LLM2. LLM 返回一个 JSON 格式的操作列表(action list)3. 我们逐条执行这些操作### 定义操作协议:json[ {"action": "goto", "url": "https://baidu.com"}, {"action": "fill", "selector": "#kw", "value": "Python"}, {"action": "click", "selector": "#su"}, {"action": "extract", "selector": "div.result h3"}]### 实现 AI 规划器:python# agent.pyimport jsonimport openaiclass BrowserAgent: def __init__(self, api_key, model="gpt-4o-mini"): openai.api_key = api_key self.model = model self.operations = { "goto": self._goto, "fill": self._fill, "click": self._click, "extract": self._extract, } def plan(self, user_command): """调用 LLM 生成操作序列""" prompt = f""" 你是一个浏览器操作规划器。根据用户指令,生成一个 JSON 操作列表。 可用操作: - goto: {"url": "..."} - fill: {"selector": "...", "value": "..."} - click: {"selector": "..."} - extract: {"selector": "..."} 用户指令: {user_command} 只返回 JSON 数组,不要有其他文字。 """ response = openai.chat.completions.create( model=self.model, messages=[{"role": "user", "content": prompt}], temperature=0 ) content = response.choices[0].message.content return json.loads(content) def execute(self, actions, page): """执行操作序列""" for action in actions: op = action["action"] # 忽略 extract,因为我们需要收集结果 if op == "extract": result = self.operations[op](page, action["selector"]) print(f"提取结果: {result}") else: self.operations[op](page, action) # 以下是具体操作实现(略,略) def _goto(self, page, action): page.goto(action["url"]) def _fill(self, page, action): page.fill(action["selector"], action["value"]) def _click(self, page, action): page.click(action["selector"]) def _extract(self, page, selector): return page.text_content(selector)—## 五、第三步:完整示例 —— 让 AI Agent 搜索并提取结果现在我们写一个主程序,用自然语言指令让 Agent 去百度搜索“人工智能”并提取第一条结果的标题。python# main.pyfrom playwright.sync_api import sync_playwrightfrom agent import BrowserAgentfrom browser_ops import run_basic_task # 可选,用于对比def main(): # 初始化 Agent(替换为你的 OpenAI Key) agent = BrowserAgent(api_key="your-openai-key") user_command = "打开百度,搜索“人工智能”,然后提取第一条搜索结果的标题" # 1. AI 规划 actions = agent.plan(user_command) print("规划的操作:", actions) # 2. 执行 with sync_playwright() as p: browser = p.chromium.launch(headless=False) # 显示浏览器,便于观察 page = browser.new_page() agent.execute(actions, page) browser.close()if __name__ == "__main__": main()运行效果:- 浏览器自动打开百度- 在搜索框中填入“人工智能”- 点击“百度一下”按钮- 等待结果加载,提取第一条结果的标题并打印—## 六、进阶:让 Agent 具备自适应与错误恢复真实世界中,页面结构可能变化,或者网络延迟导致元素未加载。我们可以让 Agent 在遇到异常时,把错误信息反馈给 LLM,让 LLM 调整策略。python# 在 execute 中添加异常处理与 LLM 重规划def execute_with_fallback(self, actions, page, max_retries=3): for i, action in enumerate(actions): try: self.operations[action["action"]](page, action) except Exception as e: print(f"步骤 {i} 失败: {e}") # 构造新的指令,让 LLM 重新规划 new_prompt = f"执行以下操作时出错: {action},错误: {e}。请给出替代方案,只返回 JSON 数组。" new_actions = self.plan(new_prompt) # 重新执行后续步骤 self.execute_with_fallback(new_actions, page, max_retries-1) break—## 七、总结通过本文,我们完成了从 Playwright 基础自动化AI Agent 驱动的智能浏览器任务 的跃迁:1. 基础:掌握了 Playwright 的 gotoclickextract 等核心操作。2. 进阶:利用 LLM 将自然语言指令转化为结构化操作序列,实现了“说一句话,浏览器帮你干活”。3. 高级:加入了错误恢复机制,Agent 能根据反馈自我修正,这正是智能体的价值所在。未来,你可以在此基础上扩展更多操作(如滚动、等待、文件上传),甚至接入多模态模型(识别图片验证码),让浏览器 Agent 真正成为你的“数字员工”。但要注意,AI Agent 并非万能——它依赖 LLM 的推理能力、页面选择器的稳定性,以及合理的执行约束。建议在生产环境中,为 Agent 设定白名单操作域和超时限制,避免意外行为。希望这篇文章能为你打开一扇通往“智能自动化”的大门。现在,去试试让你的 AI Agent 帮你自动下载报表、监控价格、或者管理社交媒体吧!

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐