AI代理集成浏览器自动化:Selenium与LangChain实战指南
发布时间:2026/8/9 23:01:48 作者:尧图编辑部 阅读量:1,286

最近在尝试将 AI 融入日常开发工作流时你是否遇到过这样的困境想让 AI 帮你分析一个网页的结构、抓取特定数据或者测试一个在线 API却不得不在聊天窗口、代码编辑器和浏览器之间来回切换手动复制粘贴 URL 和代码片段这种割裂的体验极大地限制了 AI 的自动化潜力。本文将深入探讨一个能显著提升开发效率的解决方案为 AI 代理如 Claude Code / Codex集成内置浏览器能力。我们将从核心概念入手逐步拆解如何配置环境、编写自动化脚本并构建一个完整的、可复用的工作流。无论你是想实现网页内容自动分析、数据抓取还是构建复杂的端到端测试这套方案都能让你告别手动操作实现效率翻倍。1. 理解 AI 代理与浏览器自动化在深入实操之前我们有必要厘清几个核心概念理解为什么“AI 浏览器”的组合能产生巨大的化学反应。1.1 什么是 AI 代理AI AgentAI 代理在此上下文中特指那些能够理解自然语言指令、并执行一系列复杂任务如编写代码、运行命令、操作文件系统的 AI 模型或工具。它们不再是简单的问答机器人而是具备了“动手能力”的智能助手。Claude Code通常指 Claude 模型在代码理解和生成方面的能力或者指一些集成了 Claude API 的代码辅助工具/插件。它擅长根据上下文生成、解释和修改代码。Codex由 OpenAI 开发的模型是 GitHub Copilot 背后的核心技术之一专精于代码生成和补全。本文讨论的“AI 代理”更偏向于一个能够接收指令并驱动外部工具如浏览器执行任务的系统。它可以基于 Claude、GPT 或 Codex 等模型构建。1.2 浏览器自动化的价值浏览器自动化指的是通过脚本程序而非人工点击来控制浏览器完成导航、点击、表单填写、数据提取等操作。最流行的工具是Selenium和Puppeteer。当 AI 代理与浏览器自动化结合时其能力边界被极大地扩展了信息获取AI 可以指挥浏览器访问任何公开网页获取实时、结构化的信息而不再依赖可能过时的训练数据。交互操作AI 可以模拟用户登录、点击按钮、提交表单实现对 Web 应用的自动化测试或操作。工作流串联AI 可以将网页数据、API 响应与本地代码逻辑、文件操作无缝衔接形成一个闭环的自动化流水线。1.3 核心架构AI 作为“大脑”浏览器作为“手脚”想象这样一个场景你告诉 AI “去 GitHub 上找到我最受欢迎的仓库把 README 的第一段总结一下”。大脑AI 代理理解你的自然语言指令将其分解为可执行的步骤1) 打开浏览器2) 导航到 GitHub3) 登录如果需要4) 找到目标仓库5) 定位 README6) 提取第一段文本7) 进行总结。手脚浏览器自动化工具忠实地执行 AI 生成的每一步浏览器操作代码如使用 Selenium 的find_element,click,get_text等方法。这种架构使得 AI 不再局限于文本生成而是成为了一个能够操作数字世界的智能体。2. 环境准备与工具选型要实现上述架构我们需要搭建一个开发环境。以下方案以 Python 生态为例因为它拥有丰富的 AI 和自动化库。2.1 基础环境配置首先确保你的系统已安装 Python推荐 3.8 及以上版本和 pip 包管理器。# 检查 Python 版本 python --version # 检查 pip 版本 pip --version建议使用虚拟环境来管理项目依赖避免包冲突。# 创建虚拟环境 python -m venv ai_browser_agent_env # 激活虚拟环境 # Windows: ai_browser_agent_env\Scripts\activate # macOS/Linux: source ai_browser_agent_env/bin/activate2.2 核心工具安装我们将使用以下几个关键库OpenAI / Anthropic API 客户端用于与 AI 模型交互。本文示例将使用 OpenAI GPT 系列模型兼容 Codex 能力进行演示。你也可以替换为 Claude 的官方 SDK。Selenium强大的浏览器自动化框架。WebDriver Manager自动管理浏览器驱动如 ChromeDriver省去手动下载和路径配置的麻烦。LangChain可选但推荐一个用于开发由语言模型驱动的应用程序的框架。它提供了标准的“代理Agent”接口能更方便地将模型、工具如浏览器和记忆串联起来。在激活的虚拟环境中运行以下命令安装pip install openai selenium webdriver-manager langchain langchain-openai注意使用 OpenAI API 需要有效的 API Key。请前往 OpenAI 官网注册并获取。务必妥善保管你的 API Key不要直接硬编码在代码中。2.3 浏览器驱动准备我们将使用 Chrome 浏览器进行自动化。webdriver-manager会在首次运行时自动下载匹配的 ChromeDriver。# 也可以手动安装 Chrome 浏览器如果未安装 # 请确保已安装 Chrome 浏览器3. 核心组件拆解与原理在编写完整工作流之前我们先独立学习各个核心组件如何工作。3.1 使用 Selenium 进行基础浏览器控制Selenium 的核心是WebDriver它提供了与浏览器交互的编程接口。# 文件basic_browser.py from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service # 1. 设置 ChromeDriver自动管理 service Service(ChromeDriverManager().install()) # 2. 配置浏览器选项可选无头模式、禁用GPU等 options webdriver.ChromeOptions() # options.add_argument(--headless) # 无头模式不显示浏览器窗口 # options.add_argument(--disable-gpu) options.add_argument(--no-sandbox) options.add_argument(--disable-dev-shm-usage) # 3. 创建浏览器驱动实例 driver webdriver.Chrome(serviceservice, optionsoptions) try: # 4. 导航到网页 driver.get(https://www.baidu.com) print(f页面标题: {driver.title}) # 5. 定位元素并交互例如搜索框 search_box driver.find_element(By.ID, kw) # 百度搜索框的ID search_box.send_keys(Selenium 自动化测试) search_box.send_keys(Keys.RETURN) # 6. 等待结果加载并获取信息 wait WebDriverWait(driver, 10) first_result wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, h3.t a)) ) print(f第一个结果标题: {first_result.text}) print(f第一个结果链接: {first_result.get_attribute(href)}) # 7. 执行JavaScript如果需要 driver.execute_script(window.scrollTo(0, document.body.scrollHeight);) print(已滚动到页面底部) finally: # 8. 关闭浏览器 driver.quit()关键点解释WebDriverWait和expected_conditions用于处理页面加载延迟是编写稳定自动化脚本的必备技巧。find_element有多种定位方式ID, NAME, CSS_SELECTOR, XPATH等选择最稳定的一种。务必在finally块或使用with语句调用driver.quit()来释放资源。3.2 与 AI 模型交互OpenAI API 示例接下来我们看看如何让 AI 理解我们的指令。这里使用 OpenAI 的gpt-3.5-turbo或gpt-4模型。# 文件basic_ai.py import os from openai import OpenAI # 设置你的 OpenAI API Key从环境变量读取更安全 client OpenAI(api_keyos.environ.get(OPENAI_API_KEY)) def ask_ai(prompt): 向AI模型发送提示并获取回复 try: response client.chat.completions.create( modelgpt-3.5-turbo, # 或 gpt-4 messages[ {role: system, content: 你是一个有帮助的编程助手擅长将自然语言指令分解为具体的浏览器自动化步骤使用Selenium。}, {role: user, content: prompt} ], temperature0.2, # 较低的温度使输出更确定适合生成代码 max_tokens1000 ) return response.choices[0].message.content except Exception as e: return f调用AI API时出错: {e} if __name__ __main__: # 示例让AI规划一个任务 user_request 我想打开百度搜索‘今日天气’然后点击第一个新闻链接。请用中文列出大概的步骤。 ai_response ask_ai(user_request) print(AI 给出的任务步骤) print(ai_response)运行这个脚本AI 可能会返回类似这样的步骤启动 Chrome 浏览器并打开百度首页 (https://www.baidu.com)。定位搜索输入框ID 可能为kw输入“今日天气”。模拟按下回车键或点击“百度一下”按钮提交搜索。等待搜索结果页面加载完成。在结果中定位第一个新闻类结果的标题链接可能需要通过 CSS 选择器如.result-op .t a或.c-container .t a来筛选。点击该链接。等待新页面加载可以获取新页面的标题或 URL 作为完成确认。3.3 连接 AI 与浏览器让 AI 生成可执行代码这是最核心的一步。我们需要让 AI 不仅输出步骤还能输出可直接运行的 Selenium Python 代码。# 文件ai_code_generator.py import os from openai import OpenAI client OpenAI(api_keyos.environ.get(OPENAI_API_KEY)) def generate_selenium_code(task_description): 根据任务描述让AI生成完整的Selenium Python脚本 system_prompt 你是一个专业的Python Selenium自动化脚本生成器。用户会描述一个网页操作任务你需要生成一个完整、可独立运行的Python脚本。 要求 1. 脚本必须包含必要的导入selenium, webdriver-manager等。 2. 使用 webdriver_manager.chrome.ChromeDriverManager 自动管理驱动。 3. 配置合理的ChromeOptions可以先注释掉无头模式。 4. 使用 WebDriverWait 和 expected_conditions 处理等待确保脚本健壮。 5. 每一步操作都要有清晰的注释。 6. 最后要优雅地关闭浏览器使用try-finally或with语句。 7. 只输出代码不要输出任何解释性文字。 user_prompt f请生成一个Selenium Python脚本实现以下任务{task_description} try: response client.chat.completions.create( modelgpt-3.5-turbo, messages[ {role: system, content: system_prompt}, {role: user, content: user_prompt} ], temperature0.1, # 非常低的温度确保代码格式稳定 max_tokens2000 ) generated_code response.choices[0].message.content # 清理可能出现的代码块标记 if generated_code.startswith(python): generated_code generated_code[9:] if generated_code.endswith(): generated_code generated_code[:-3] return generated_code.strip() except Exception as e: return f生成代码时出错: {e} if __name__ __main__: task 打开豆瓣电影Top250页面 (https://movie.douban.com/top250)获取第一页所有电影的标题和评分并打印出来。 code generate_selenium_code(task) print(生成的 Selenium 代码) print(code) # 你可以选择将代码保存到文件并运行 # with open(generated_script.py, w, encodingutf-8) as f: # f.write(code)运行此脚本AI 会生成一个包含完整import语句、驱动设置、页面导航、元素定位和数据提取的 Python 文件。这是实现“AI 驱动浏览器”的关键桥梁。4. 构建完整的 AI 代理自动化工作流现在我们将上述组件组合起来创建一个更智能、更通用的工作流。这个工作流允许用户用自然语言描述任务AI 生成代码然后系统自动执行该代码并返回结果。4.1 项目结构设计创建一个清晰的项目目录ai_browser_agent/ ├── agents/ │ └── browser_agent.py # 核心代理类 ├── tools/ │ └── code_executor.py # 代码执行器 ├── utils/ │ ├── ai_client.py # AI 客户端封装 │ └── prompts.py # 系统提示词模板 ├── outputs/ # 存放生成的脚本和执行结果 ├── main.py # 主程序入口 ├── requirements.txt # 依赖列表 └── .env # 环境变量存储API KEY4.2 实现核心代理类我们使用 LangChain 来构建代理因为它提供了强大的工具调用和链式思考能力。# 文件agents/browser_agent.py import os import sys sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from langchain.agents import AgentExecutor, create_react_agent from langchain.tools import Tool from langchain_openai import ChatOpenAI from langchain.prompts import PromptTemplate from tools.code_executor import SeleniumCodeExecutor import warnings warnings.filterwarnings(ignore) class BrowserAutomationAgent: def __init__(self, openai_api_keyNone): # 1. 初始化大语言模型 llm ChatOpenAI( modelgpt-3.5-turbo, temperature0.1, openai_api_keyopenai_api_key or os.environ.get(OPENAI_API_KEY) ) # 2. 创建代码执行工具 self.code_executor SeleniumCodeExecutor() execute_tool Tool( nameExecuteSeleniumCode, funcself._execute_generated_code, description用于执行生成的Selenium Python代码以完成浏览器自动化任务。 输入应该是完整的、可运行的Python代码字符串。此工具将运行代码并返回执行结果或错误信息。 ) # 3. 定义代理使用的工具列表 tools [execute_tool] # 4. 创建ReAct风格的提示模板 prompt_template PromptTemplate.from_template( 你是一个强大的浏览器自动化AI助手。你的目标是理解用户请求并生成正确的Selenium Python代码来完成任务。 你有权使用一个工具 - ExecuteSeleniumCode: 当你确定了实现用户请求所需的完整Selenium代码后使用这个工具来执行它。 请严格按照以下格式思考和工作 Question: 用户提出的原始问题 Thought: 你需要思考如何用Selenium实现这个任务规划步骤。 Action: 你要采取的行动只能是 ExecuteSeleniumCode Action Input: 你要执行的、完整的Python代码字符串用三重引号包裹。 Observation: 工具执行后的结果 ... (这个 Thought/Action/Action Input/Observation 循环可以重复) Thought: 我现在知道最终答案了 Final Answer: 向用户总结任务执行结果并附上关键数据。 开始 Question: {input} Thought: {agent_scratchpad} ) # 5. 创建ReAct代理 agent create_react_agent(llmllm, toolstools, promptprompt_template) # 6. 创建代理执行器 self.agent_executor AgentExecutor( agentagent, toolstools, verboseTrue, # 设置为True可以看到代理的思考过程调试时非常有用 handle_parsing_errorsTrue, max_iterations3 # 限制循环次数防止死循环 ) def _execute_generated_code(self, code_string: str) - str: 内部方法调用代码执行器工具 return self.code_executor.execute(code_string) def run(self, user_query: str) - str: 运行代理处理用户查询 try: result self.agent_executor.invoke({input: user_query}) return result.get(output, 任务执行完成但未返回明确输出。) except Exception as e: return f代理执行过程中出现错误: {e}4.3 实现安全的代码执行器直接执行 AI 生成的代码存在安全风险。我们必须在一个受控的、隔离的环境中执行。# 文件tools/code_executor.py import subprocess import sys import tempfile import os import time class SeleniumCodeExecutor: def __init__(self, timeout60): self.timeout timeout # 代码执行超时时间秒 def execute(self, code: str) - str: 在一个子进程中安全地执行生成的Python代码。 返回标准输出和标准错误。 # 1. 创建一个临时Python文件 with tempfile.NamedTemporaryFile(modew, suffix.py, deleteFalse, encodingutf-8) as f: # 为代码添加一些安全检查和必要的导入 safe_code self._wrap_code_with_safety(code) f.write(safe_code) temp_file_path f.name result_output try: # 2. 在子进程中执行代码 process subprocess.Popen( [sys.executable, temp_file_path], # 使用当前Python解释器 stdoutsubprocess.PIPE, stderrsubprocess.PIPE, textTrue, encodingutf-8 ) # 3. 等待进程完成设置超时 try: stdout, stderr process.communicate(timeoutself.timeout) return_code process.returncode except subprocess.TimeoutExpired: process.kill() stdout, stderr process.communicate() return f错误代码执行超时{self.timeout}秒。\n标准错误{stderr} # 4. 收集输出 if return_code 0: result_output f代码执行成功。\n输出\n{stdout} if stderr: result_output f\n警告\n{stderr} else: result_output f代码执行失败返回码{return_code}。\n标准错误\n{stderr}\n标准输出\n{stdout} except Exception as e: result_output f执行过程中发生异常{e} finally: # 5. 清理临时文件 try: os.unlink(temp_file_path) except: pass return result_output def _wrap_code_with_safety(self, raw_code: str) - str: 包装原始代码添加必要的导入、安全限制和错误处理。 这是一个简单的示例真实环境需要更严格的安全沙箱。 wrapped_code f import sys import traceback from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import * from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service import time # 安全限制禁止某些危险操作示例可根据需要扩展 _DANGEROUS_MODULES [os, subprocess, shutil, sys] for mod in _DANGEROUS_MODULES: if mod in sys.modules: # 可以尝试重写或限制这里简单打印警告 print(f警告代码中尝试使用受限模块 {{mod}}) def main(): try: # 用户生成的代码被嵌入这里 {self._indent_code(raw_code)} except Exception as e: print(f自动化脚本运行时发生错误{{e}}) traceback.print_exc() finally: # 确保浏览器被关闭 try: driver.quit() except: pass if __name__ __main__: main() return wrapped_code def _indent_code(self, code: str) - str: 为嵌入的代码添加统一的缩进 lines code.split(\n) indented_lines [ line if line.strip() else line for line in lines] return \n.join(indented_lines)4.4 主程序入口# 文件main.py import os from dotenv import load_dotenv from agents.browser_agent import BrowserAutomationAgent # 加载环境变量.env文件中应有 OPENAI_API_KEYyour_key_here load_dotenv() def main(): print( AI 浏览器自动化代理 ) print(请输入你的任务描述例如打开百度搜索‘Python教程’把第一页结果的标题保存到文件。) print(输入 quit 或 exit 退出程序。\n) agent BrowserAutomationAgent() while True: user_input input(\n你的指令: ).strip() if user_input.lower() in [quit, exit, q]: print(程序退出。) break if not user_input: continue print(\nAI 正在思考并执行...) result agent.run(user_input) print(\n *50) print(执行结果) print(result) print(*50) if __name__ __main__: main()4.5 环境变量与依赖文件创建.env文件确保在.gitignore中忽略它OPENAI_API_KEYsk-your-actual-openai-api-key-here创建requirements.txtopenai1.0.0 selenium4.0.0 webdriver-manager4.0.0 langchain0.1.0 langchain-openai0.0.5 python-dotenv1.0.04.6 运行与验证在项目根目录安装依赖pip install -r requirements.txt确保.env文件已正确配置 API Key。运行主程序python main.py输入一个自然语言指令例如“打开豆瓣读书 Top250 页面获取前5本书的名字和作者然后打印出来。”程序将启动你会看到 LangChain 代理的“思考”过程因为我们在AgentExecutor中设置了verboseTrue你的指令: 打开豆瓣读书 Top250 页面获取前5本书的名字和作者然后打印出来。 AI 正在思考并执行... Entering new AgentExecutor chain... Thought: 用户想要打开豆瓣读书Top250页面并获取前5本书的信息。我需要生成Selenium代码来实现这个任务。首先我需要导航到正确的URL然后定位到书籍列表元素提取前五个项目中的书名和作者信息。 Action: ExecuteSeleniumCode Action Input: python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service import time service Service(ChromeDriverManager().install()) options webdriver.ChromeOptions() options.add_argument(--no-sandbox) driver webdriver.Chrome(serviceservice, optionsoptions) try: driver.get(https://book.douban.com/top250) wait WebDriverWait(driver, 10) # 等待书籍列表加载 book_items wait.until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, div.pl2 a)) ) books_info [] for i in range(min(5, len(book_items))): # 只取前5本 book_link book_items[i] title book_link.get_attribute(title) or book_link.text.strip() # 尝试获取作者信息可能需要进入详情页或从当前页获取 # 先尝试在当前项附近找作者信息 parent_item book_link.find_element(By.XPATH, ./ancestor::tr) try: author_span parent_item.find_element(By.CSS_SELECTOR, p.pl) author author_span.text.split(/)[0].strip() if author_span else 未找到作者 except: author 未找到作者 books_info.append(f{i1}. 《{title}》 - {author}) print(豆瓣读书Top250前5本书) for info in books_info: print(info) finally: driver.quit()Observation: 代码执行成功。 输出 豆瓣读书Top250前5本书《追风筝的人》 - [美] 卡勒德·胡赛尼《解忧杂货店》 - [日] 东野圭吾《小王子》 - [法] 圣埃克苏佩里《白夜行》 - [日] 东野圭吾《围城》 - 钱钟书Thought: 我已经成功执行了代码获取了前5本书的信息并打印出来。任务完成。 Final Answer: 已成功打开豆瓣读书Top250页面并获取了前5本书的详细信息。结果如下《追风筝的人》 - [美] 卡勒德·胡赛尼《解忧杂货店》 - [日] 东野圭吾《小王子》 - [法] 圣埃克苏佩里《白夜行》 - [日] 东野圭吾《围城》 - 钱钟书Finished chain.至此一个完整的、由自然语言驱动的 AI 浏览器自动化代理就构建完成了。你可以尝试更复杂的指令如“登录我的测试邮箱查看最新一封邮件的主题”或“在电商网站搜索‘无线鼠标’按价格排序把前三名的商品名和价格保存到 CSV 文件”。AI 会尝试理解并生成相应的代码来完成任务。 ## 5. 常见问题与排查思路 在实际使用中你可能会遇到各种问题。以下是一些常见问题及其解决方案。 | 问题现象 | 可能原因 | 排查与解决思路 | | :--- | :--- | :--- | | **AI 生成的代码无法运行语法错误** | 1. 模型生成时格式混乱。br2. 提示词不够精确。 | 1. 检查 code_executor.py 中的 _wrap_code_with_safety 函数确保它正确包裹了代码。br2. 优化给 AI 的 system_prompt要求其输出**纯净的、无 Markdown 代码块标记**的代码。br3. 在代理的 _execute_generated_code 方法中添加日志打印出即将执行的原始代码字符串便于调试。 | | **Selenium 无法启动浏览器或找不到元素** | 1. Chrome 浏览器版本与 ChromeDriver 不匹配。br2. 网页结构发生变化元素定位器失效。br3. 页面加载太慢等待时间不足。 | 1. 感谢 webdriver-manager它通常能自动匹配版本。检查其日志或尝试手动指定版本。br2. 让 AI 生成更健壮的定位策略如优先使用 ID、NAME其次 CSS_SELECTOR避免脆弱的 XPATH。使用 WebDriverWait 显式等待。br3. 增加 WebDriverWait 的超时时间或添加 time.sleep() 作为临时调试手段生产代码不推荐。 | | **代理陷入循环或执行错误操作** | 1. AI 对任务理解有偏差。br2. max_iterations 设置过小或过大。br3. 工具描述不够清晰。 | 1. 在 prompt_template 中提供更详细的上下文和示例。br2. 调整 AgentExecutor 的 max_iterations 参数比如设为 5。br3. 优化 Tool 的 description明确其输入应为**完整代码**并说明工具的作用。启用 verboseTrue 观察代理的思考链。 | | **执行超时** | 1. 网页操作本身耗时很长。br2. 生成的代码有无限循环。br3. 网络状况差。 | 1. 增加 SeleniumCodeExecutor 中的 timeout 参数。br2. 在生成的代码中避免使用 while True 等循环或确保有退出条件。br3. 考虑在代码中添加步骤性的 print 语句方便追踪执行进度。 | | **安全风险AI 生成了危险代码** | AI 可能被诱导生成访问文件系统、执行系统命令的代码。 | 1. **这是最重要的风险** code_executor.py 中的安全包装是底线。可以加强它例如使用 ast 模块解析代码禁止导入危险模块os, subprocess, sys 等或在 Docker 容器等沙箱环境中运行整个代理。br2. **永远不要**在具有高权限或存有敏感数据的生产服务器上直接运行此类系统。br3. 对用户输入进行初步过滤拒绝明显恶意的指令。 | ## 6. 最佳实践与进阶优化 将 AI 代理用于浏览器自动化是一个强大的模式但要用于实际项目还需遵循以下最佳实践。 ### 6.1 提示词工程优化 AI 的表现极大程度依赖于提示词。针对浏览器自动化可以优化你的 system_prompt - **明确角色** “你是一个专业的 Python Selenium 自动化专家擅长编写健壮、可维护的网页操作脚本。” - **指定规范** “代码必须包含异常处理try-except。必须使用 WebDriverWait 进行显式等待。优先使用 By.ID 和 By.CSS_SELECTOR 定位元素。” - **提供示例** 在提示词中给出 1-2 个简短的成功代码示例让 AI 学习格式和风格。 - **限制输出** “只输出代码不要有任何解释。代码必须是一个完整的、可运行的 Python 脚本。” ### 6.2 增强代码执行的安全性 前述的 _wrap_code_with_safety 是基础防护。对于更严肃的用途应考虑 - **使用沙箱** 在 Docker 容器中运行代码执行器限制其网络、文件系统和 CPU 资源。 - **代码静态分析** 使用 ast抽象语法树模块在运行前分析代码禁止导入黑名单模块、调用危险函数如 eval, exec, open 用于写模式。 - **权限最小化** 以低权限用户身份运行整个 Python 进程。 ### 6.3 处理动态内容和复杂交互 - **应对反爬虫** 一些网站会检测 Selenium。可以添加 options.add_argument(--disable-blink-featuresAutomationControlled) 等选项或使用 undetected-chromedriver 等库。但务必遵守网站的 robots.txt 和服务条款。 - **处理 iframe 和弹窗** 在提示词中教导 AI在操作前需要使用 driver.switch_to.frame() 或 driver.switch_to.alert()。 - **文件上传/下载** Selenium 处理文件上传较麻烦。可以提示 AI 使用 send_keys() 直接传递文件路径到 input type”file” 元素。对于下载需预先设置好浏览器的下载路径。 ### 6.4 集成到现有工作流 - **作为微服务** 将 BrowserAutomationAgent 封装为 FastAPI 或 Flask 服务提供 HTTP API供其他系统调用。 - **定时任务** 结合 cron 或 Celery让 AI 代理定期执行一些重复性的网页监控、数据抓取任务。 - **与 CI/CD 集成** 在自动化测试中可以用自然语言描述一个前端交互测试场景让 AI 代理生成并执行对应的 Selenium 测试脚本。 ### 6.5 切换 AI 模型后端 本文示例使用了 OpenAI GPT。如果你想使用 Claude通过 Anthropic API只需替换 langchain_openai.ChatOpenAI 为 langchain_anthropic.ChatAnthropic并相应调整初始化参数和 API Key 即可。LangChain 的良好抽象使得切换模型后端变得相对容易。 通过将 AI 的语言理解能力与 Selenium 的浏览器控制能力相结合我们构建了一个强大的自动化代理。它极大地降低了自动化脚本的编写门槛使非专业程序员也能通过自然语言指挥浏览器完成复杂任务。从简单的信息抓取到多步骤的业务流程自动化这个模式拥有广泛的应用前景。