AdsPower + AI 浏览器自动化:用本地 API、Playwright 和 MCP 驱动独立浏览器环境
说明:文中 AdsPower 注册链接和邀请码 H1vkd0 是我的推广链接,通过它注册价格不变,我会拿到一点佣金。
用 AI 做浏览器自动化,最麻烦的往往不是写脚本,而是浏览器环境:每个任务要独立的登录状态、Cookie 不能串、团队里几个人要共用同一套环境。AdsPower 本来是做多账号环境管理的工具,它的本地 API 和官方 MCP 正好能把这两件事接起来:一个账号、一个项目一个独立的浏览器环境,用 Playwright 脚本或者 Claude Code 这类 AI Agent 去驱动它。
这篇讲两种用法:用 Python Playwright 控制 AdsPower 环境,以及让 Claude Code 通过 MCP 直接操作浏览器。
先说清楚:本地 API 要付费版
AdsPower 免费版只能建 2 个环境,而且不能用本地 API,官方文档原话是 "A paid AdsPower plan is required to use the API"。所以想跟着这篇做自动化,需要:
- 开通付费版(专业版起,可选 10 / 20 / 50 / 100 个环境,季付、年付有折扣),具体价格以官网为准
- 或者先用官方的 7 天全功能免费试用体验一下
注册地址:AdsPower 注册链接,邀请码 H1vkd0。客户端支持 Windows、macOS 和 Linux(Ubuntu 22.04 及以上)。
第一步:开启本地 API,拿到 API Key
- 安装并登录 AdsPower 客户端
- 进入 账户管理 → 设置 → Local API
- 记下接口地址,默认是
http://local.adspower.net:50325(也可以用http://localhost:50325,端口以这个页面显示的为准) - 点 Generate api-key 生成 API Key。一个账号只有一个 Key,重新生成后旧的立刻失效
先在浏览器里打开 http://local.adspower.net:50325/status 测一下,返回 {"code":0,"msg":"success"} 就说明接口通了。
开了安全校验的话,之后所有请求都要带请求头:
Authorization: Bearer 你的API_KEY注意本地 API 依赖 AdsPower 客户端在运行,客户端关了接口就不通了。
第二步:用 Python Playwright 控制一个环境
思路是:调接口启动某个环境 → 接口返回一个调试地址 → Playwright 用 connect_over_cdp 连上去,之后就和平时写 Playwright 一样了。
先装依赖:
pip install requests playwright完整示例(打开第一个环境、访问网页、打印标题、关闭):
import requests
from playwright.sync_api import sync_playwright
API = "http://local.adspower.net:50325"
HEADERS = {"Authorization": "Bearer 你的API_KEY"}
def first_profile():
r = requests.get(f"{API}/api/v1/user/list", params={"page_size": 10}, headers=HEADERS).json()
return r["data"]["list"][0]["user_id"]
def start(user_id):
r = requests.get(f"{API}/api/v1/browser/start", params={"user_id": user_id}, headers=HEADERS).json()
if r["code"] != 0:
raise RuntimeError(r["msg"])
return r["data"]["ws"]["puppeteer"]
def stop(user_id):
requests.get(f"{API}/api/v1/browser/stop", params={"user_id": user_id}, headers=HEADERS)
uid = first_profile()
ws = start(uid)
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(ws)
context = browser.contexts[0]
page = context.pages[0] if context.pages else context.new_page()
page.goto("https://example.com")
print(page.title())
browser.close()
stop(uid)几个要点:
- 查询环境列表的
page_size默认只返回 1 条,最多 100,要列多个记得传参数 - 启动接口返回的
data.ws.puppeteer就是给 Playwright / Puppeteer 用的 WebSocket 地址;用 Selenium 的话取data.ws.selenium和data.webdriver - 想不弹窗口在后台跑,启动时加参数
headless=1 - 用连接上去的那个 context,不要自己
new_context(),否则用的就不是这个环境的 Cookie 和设置了 - 新版还有一套 v2 接口(
POST /api/v2/browser-profile/start,传profile_id),返回格式一样,二选一就行
接口有频率限制:环境数 200 以内是每秒 2 次,部分接口每秒 1 次。批量启动时记得加间隔。
第三步:让 Claude Code 通过 MCP 直接操作浏览器
这是最省事的玩法。AdsPower 官方出了 MCP 服务(npm 包 local-api-mcp-typescript),提供打开环境、新建环境、跳转网页、点击、填表、截图、读取页面文字等二十多个工具。接上之后,你直接用中文跟 AI 说要做什么就行。
需要 Node.js 18 以上,并且本机装着、开着 AdsPower。在 Claude Code 里添加:
claude mcp add adspower -e API_KEY=你的API_KEY -e PORT=50325 -- npx -y local-api-mcp-typescript用 Cursor、Cherry Studio 这类支持 MCP 的客户端也一样,命令填 npx -y local-api-mcp-typescript,环境变量填 API_KEY 和 PORT。
添加好之后,在对话里就可以这样用:
- "列出我 AdsPower 里的浏览器环境"
- "打开名字叫『资料收集』的环境,访问某某网页,把页面上的价格表整理成表格"
- "打开环境 3,截一张当前页面的图"
AI 会自己调用对应的工具去操作那个独立的浏览器环境,登录状态都是这个环境自己的,不会跟你日常用的浏览器混在一起。
如果你还没装 Claude Code,或者想让它走更便宜的模型,可以看 Claude Code 接入 DeepSeek;想了解另一个浏览器 Agent 工具,可以看 Browser Use CLI 教程。
适合用来做什么
- 团队共用环境:运营、客服几个人共用同一批店铺或社媒后台,每个账号一个环境,分享环境就行,不用到处发密码
- 按项目隔离:每个项目、每个客户一个独立环境,Cookie 和登录状态互不影响
- 自动化自己的重复工作:定时登录自己的后台导出报表、整理资料、填写固定格式的表单
最后提醒一句:自动化操作要遵守目标网站的服务条款。AdsPower 自己的条款也写明,禁止用来欺诈、冒充或绕过网站的安全机制,自动化导致第三方账号被限制的后果由用户自己承担。别拿它去批量注册、刷量。
参考:AdsPower Local API 文档、官方代码示例、AdsPower MCP(npm)。文中代码按官方文档和示例整理。