“AI 控制浏览器”目前有四类方案,权限差异非常大。做爬虫 / 自动化 / Agent 时选错方案会撞墙——比如插件方案下想调试 JS 是不可能的。
权限矩阵
| 方案 | 操作 DOM | 读 DOM | 执行 JS | 调试 JS | Chrome DevTools 全权限 | 保留登录态 |
|---|---|---|---|---|---|---|
| Chrome 扩展 | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
| Playwright / Puppeteer | ✅ | ✅ | ✅ | 部分 | ❌ | 需配置 |
| Chrome DevTools Protocol (CDP) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Browser Use / Open Operator | ✅ | ✅ | ✅ | 部分 | 部分 | ✅ |
方案一:Chrome 扩展
适合:日常使用中的 AI 助手(Sider、Harpa、Monica 等)、需要长期挂在浏览器里的工具。
做法:写一个 Chrome/Edge 扩展,通过 content script 读写 DOM:
// content.js
document.querySelector("input.search").value = "hello";
document.querySelector("button.submit").click();
或者用扩展 API 拿到当前 tab 的 DOM 快照喂给 LLM:
chrome.tabs.sendMessage(tabId, { type: "getDOM" }, response => {
callLLM(response.html);
});
局限:
- 无法调试 JS(没 DevTools 权限)
- 无法访问 Network / Sources / Performance
- 某些反爬网站可能识别扩展环境
方案二:Playwright / Puppeteer
适合:爬虫、自动化测试、CI 里跑的一次性任务。
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://example.com")
# 读 DOM
html = page.content()
# 执行 JS
result = page.evaluate("() => document.title")
# 点击
page.click("button.submit")
配合 LLM:Playwright 抓页面 → 传 DOM 给模型 → 模型返回下一步操作 → Playwright 执行。
局限:
- 每次启动是全新 profile,没登录态(除非
launch_persistent_context) - 反自动化检测(Cloudflare、Datadome 之类)会挂
- 网站升级 selector 就崩
有个绕检测的插件叫 playwright-stealth,能过大多数入门反爬。
方案三:Chrome DevTools Protocol(权限最高)
适合:需要完整 DevTools 能力的场景——JS 调试、Network 拦截、Performance profiling、逆向分析。
先以 debug 模式启动 Chrome:
chrome.exe --remote-debugging-port=9222 --user-data-dir="D:\chrome-cdp"
然后 Playwright 连过去(这里 Playwright 是 CDP 的高层封装):
browser = p.chromium.connect_over_cdp("http://127.0.0.1:9222")
或者直接用底层 CDP:
from pychrome import Browser
b = Browser(url="http://127.0.0.1:9222")
tab = b.list_tab()[0]
tab.start()
tab.Runtime.evaluate(expression="document.title")
# 拦截 Network
tab.Network.enable()
tab.call_method("Fetch.enable")
# 设置断点
tab.Debugger.enable()
tab.Debugger.setBreakpointByUrl(url=".../app.js", lineNumber=100)
能力和你按 F12 一样。
方案四:Browser Use / Open Operator 类项目
近一两年新出的一批”给 LLM 用的浏览器 SDK”——比如 browser-use、Anthropic 的 Computer Use、OpenAI Operator:
from browser_use import Agent
from langchain_openai import ChatOpenAI
agent = Agent(
task="打开 GitHub 搜索 langchain 项目的最新 star 数",
llm=ChatOpenAI(model="gpt-4o"),
)
result = agent.run()
这类 SDK 帮你封装好:
- 页面截图 + 元素编号
- Vision 模型选元素
- Playwright 执行操作
- 失败自动重试
写业务代码不用管 selector,直接说自然语言。代价:慢(每步 LLM 调用)、贵(大量 vision token)、有时候错。
怎么选
| 场景 | 推荐 |
|---|---|
| 用户浏览时给 AI 助手能力 | Chrome 扩展 |
| 定时任务 / CI 里跑 | Playwright |
| 需要 JS 断点、Network 拦截、逆向 | CDP |
| 想让 LLM 自主完成复杂多步任务 | Browser Use 类 |
| 反爬严的网站 | CDP + stealth + 真实 profile |
一句话总结
日常插件、爬虫 Playwright、逆向调试 CDP、Agent 用 Browser Use——四种方案权限从低到高,按需要选。CDP 是”能上 F12 就能做的一切”的上限。
