OpenClaw 多店铺浏览器操作部署实战
OpenClaw 多店铺浏览器操作部署实战
多平台多店铺全部接入 OpenClaw。本文记录在 MacBook 上为 OpenClaw 搭建多店铺 Chrome 操控环境的完整过程——从思路、踩坑到最终落地方案。

要解决什么问题?
团队用 OpenClaw 做 AI 自动化[1]运营,旗下有多家天猫店、京东店和拼多多店。日常需要 OpenClaw 自动查看各平台后台数据、监控实时成交、抓取运营报表。
问题在于:OpenClaw 默认只能同时连接一个浏览器实例。怎么让它同时操控多家店铺的后台?需要一个基础设施——每个店铺一个独立的 Chrome 环境,互不干扰,OpenClaw 可以随时按需操控任意一个。
核心思路
思路来自一个也在用 OpenClaw 的朋友。他在 Windows 上做了套方案:利用 Chrome 的两个原生能力——Profile 身份隔离和 CDP 远程调试端口——给每个店铺分配独立的 Chrome 实例。每个店铺一个文件夹存登录态,一个端口号供 OpenClaw 连接。一台电脑跑多个互不干扰的 Chrome,Agent 按端口操控不同店铺。
( 鸣谢:郭金龙 一位喜欢探索新事物的设计大牛 )
思路很对,但他的方案跑在 Windows + WSL2 上,用到的是 PowerShell 脚本、netsh 端口转发、防火墙规则、Windows 虚拟桌面——这些在 Mac 上全都用不了,只能借鉴思路、自己重来。
第一步:店铺环境隔离——Profile 目录设计
Chrome 的 –user-data-dir 参数可以指定一个目录作为”用户数据文件夹”,里面存着这个身份的 Cookie、登录态、历史记录、插件。不同目录之间数据完全隔离——A 目录登录了 A 店,B 目录完全不知道。
用脱敏代号直接命名,一目了然:
~/ChromeProfiles/
├── A店-天猫/
├── B店-天猫/
├── C店-京东/
├── D店-拼多多/
└── E号-竞品查看/
为什么[2]直接命名而不是数字编号?因为 OpenClaw 的端口映射配置里,A店 → 9230、B店 → 9231 比 shop03 → 9224 少一次查表。店铺不会天天变,但配置写一次以后天天用,语义化命名省的心力远超起名的三秒钟。
每个目录第一次使用时,需要手工打开对应 Chrome 窗口登录一次店铺。登录态保存到「用户数据文件夹」的 Cookies 文件里,下次启动自动恢复。
第二步:给每个店铺开一扇”后门”——CDP 端口
有了独立的 Chrome 环境,OpenClaw 怎么区分操控哪个?答案是 CDP(Chrome DevTools Protocol)远程调试端口。
启动 Chrome 时加 –remote-debugging-port=9230,就相当于给这个 Chrome 实例开了一扇 API 门。OpenClaw 的 agent-browser 通过 http://127.0.0.1:9230[3] 连接,就可以操控这个窗口:打开网页、点击按钮、填写表单、截图、抓数据——能做的一切。
每个店铺分配一个独立端口:
| 店铺 | CDP 端口 |
|---|---|
| A店-天猫 | 9230 |
| B店-天猫 | 9231 |
| C店-京东 | 9232 |
| D店-拼多多 | 9233 |
| E号-竞品 | 9234 |
为什么不从 9222 开始?因为 9222 已经被 OpenClaw 自身的 Chrome 常驻进程占用。9230 起跳避免冲突。
第三步:Mac 上的三个坑
思路很清晰,但在 Mac 上跑起来的第一天就遇到了三个坑。这三个坑,Windows 方案里一个都不存在。
坑 1:macOS 钥匙串导致多 Profile 串号
Mac 上 Chrome 默认把密码存到系统钥匙串。多个 Profile 共用同一个钥匙串,结果就是:OpenClaw 要操控 B 店,连上去发现已经是 A 店的登录态——因为钥匙串把 A 店的 Cookie 同步过来了。这在多店铺场景下是灾难性的。
解决办法:启动参数加 –password-store=basic,强制 Chrome 把密码存到各自 Profile 文件夹里的独立数据库。不走系统钥匙串,每个店铺的登录态物理隔离。
坑 2:Chrome 148+ 的 403 拦截
2025 年底 Chrome 升级到 148 版本后,CDP 端口默认拒绝外部 WebSocket 连接。OpenClaw 的 agent-browser 连 CDP 全部报 403。
解决办法:启动参数加 –remote-allow-origins=,显式声明允许外部来源连接。注意在 zsh 里 * 是通配符,必须用双引号包起来:”–remote-allow-origins=“。
坑 3:平台反爬检测
各大电商平台都会检测 navigator.webdriver 属性。Chrome 通过 CDP 打开时,这个值默认是 true——等于告诉平台”我是机器人”。轻则弹验证码,重则限流甚至连累同 IP 的其他店铺。
解决办法:–disable-blink-features=AutomationControlled,强制 navigator.webdriver 返回 false。
再加两个辅助参数:–disable-sync 防止 Chrome 后台同步干扰 OpenClaw 的操控节奏,–no-first-run 跳过首次运行引导页。
完整启动脚本
#!/bin/bash
CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
BASE="/Users/duanyi/ChromeProfiles"
ANTI_CRAWL='--disable-blink-features=AutomationControlled --password-store=basic --disable-sync --no-first-run --no-default-browser-check'
for port in 9230 9231 9232 9233 9234; do
PID=$(lsof -ti tcp:$port 2>/dev/null)
[ -n "$PID" ] && kill $PID 2>/dev/null
done
sleep 2
"$CHROME" --user-data-dir="$BASE/A店-天猫" --remote-debugging-port=9230 "--remote-allow-origins=*" $ANTI_CRAWL --window-position=0,0 --window-size=470,700 &
sleep 1
"$CHROME" --user-data-dir="$BASE/B店-天猫" --remote-debugging-port=9231 "--remote-allow-origins=*" $ANTI_CRAWL --window-position=480,0 --window-size=470,700 &
sleep 1
"$CHROME" --user-data-dir="$BASE/C店-京东" --remote-debugging-port=9232 "--remote-allow-origins=*" $ANTI_CRAWL --window-position=960,0 --window-size=470,700 &
sleep 1
"$CHROME" --user-data-dir="$BASE/D店-拼多多" --remote-debugging-port=9233 "--remote-allow-origins=*" $ANTI_CRAWL --window-position=1440,0 --window-size=470,700 &
sleep 1
"$CHROME" --user-data-dir="$BASE/E号-竞品查看" --remote-debugging-port=9234 "--remote-allow-origins=*" $ANTI_CRAWL --window-position=0,710 --window-size=800,700 &
echo ""
for port in 9230 9231 9232 9233 9234; do
CODE=$(curl -s -o /dev/null -w "%{http_code}" "http://127.0.0.1:${port}/json/version")
echo " 端口 $port: $([ "$CODE" = "200" ] && echo "✅" || echo "❌")"
done
几个值得展开说的设计选择:
端口清理用 lsof 不用 killall Chrome
lsof -ti tcp:$port 从端口号反查占用进程的 PID,然后精准 kill。如果直接 killall Chrome,你正在浏览的其他 Chrome 窗口也会被关掉。Mac 上做多店铺部署,不能以牺牲正常使用为代价。
启动间歇 1 秒
Chrome 启动瞬间抢占大量资源,多个实例同时起容易卡死甚至互相抢断。sleep 1 让每个实例依次平稳启动。实测 5 个实例,加上最后的 curl 验证,总共不到 15 秒全部就绪。
窗口布局 470×700
1920×1080 的 MacBook 屏幕上,四个 470×700 的窗口刚好横向平铺不重叠。第五个窗口(竞品号)放在第二行居中。布局的设计原则是:一眼看清所有店铺状态,不用切窗口。
启动后 curl 验证
脚本最后一组 curl 循环逐个验证 CDP 端口是否返回 HTTP 200。所有端口亮绿灯后,OpenClaw 才开始工作。这步不费时间(毫秒级),但省掉了”连不上→排查→才发现端口没起”的死循环。
反爬策略:OpenClaw 不被平台拉黑的关键
参数层面的三个反爬开关只是第一道防线。研究 CloakBrowser[4] 这个开源项目时学到一条经验:反爬的关键不在用什么浏览器,而在怎么用。各平台的检测机制远比 navigator.webdriver 深,只有「真账号 + 真浏览器 + 像人的操作节奏」的组合才能真正稳定。
让 OpenClaw Agent 在操控页面时遵守三条规则:
1. 随机化操作间隔
每一步之间插入 200-800 毫秒的随机延迟。人类点完一个按钮到点下一个按钮之间有思考停顿,OpenClaw 如果真的 0 毫秒连击,返回数据的速率就是机器特征。
2. 鼠标走 OS 级事件
优先用 page.mouse 操作而非 CDP 底层的 Input.dispatchMouseEvent。后者是直接注入事件,鼠标轨迹是一条笔直线段。前者的轨迹有微小的手抖偏移,对检测系统来说这就是人操作的特征。
3. 操作频率控制
单次连续操作不超过 10 步,然后休息 5-10 秒。这个数字来自两个月的观察:淘宝后台页面连续操作超过 12 步之后,滑块验证码出现概率显著上升。
实际效果
跑两个月了,好坏都说。
好的方面:
-
登录态基本稳定。一次登录能撑 1-3 天,少数店铺能到一周。OpenClaw 每天自动工作基本不中断。 -
一键启动,10-15 秒全部窗口到位。启动后 OpenClaw 直连对应端口即可开始工作,全程不需要人为切账号。 -
OpenClaw 可以按需操控任意端口。比如「看看 A 店今天的实时成交」→ Agent 自动连 9230 端口打开后台截图返回。多个店铺需要并行检查时,效率翻倍。 -
内存占用可控。5 个 Chrome 实例加起来约 2-3GB,加上 OpenClaw 网关进程,16GB 的 MacBook 跑得很轻松。 -
因为是 macOS 原生方案,没有虚拟机和端口转发那一层,网络延迟几乎为零。
不好的方面:
-
Cookie 还是会过期。各平台的安全策略[5]摆在那,最长也就一周。过期了 OpenClaw 报登录失效,需要手动打开那个窗口重新登录。 -
偶尔弹滑块验证。特别是短时间内多个店铺都操作了一遍之后。目前的对策是不同店铺的操作间隔至少 2 小时。 -
部分电商平台网页版功能有阉割。比如批量修改商品标题,网页版不支持批量粘贴,OpenClaw 也只能一个个改。 -
首次配置要花点时间——每个店铺手工登录一次建立 Cookie,大约十几分钟。
适用场景
这个方案特别适合:
-
用 OpenClaw 管理多家电商店铺(天猫/京东/拼多多),不想在切账号上浪费生命 -
用 Mac 做主力机,不想折腾虚拟机或额外买指纹浏览器 -
需要 OpenClaw 自动抓取各平台后台数据(数据量不大,几十页/天的级别)
不适合的场景:
-
大规模无头抓取(日抓几千页以上)——应选 CloakBrowser、Playwright[6] Stealth 等专业方案 -
只有 1-2 个店铺——OpenClaw 连单个 Chrome 就够 -
需要完全无人值守——Cookie 过期和验证码还是需要人工介入
总结
这个方案的本质是 OpenClaw 的多店铺 Chrome 操控基础设施:–user-data-dir 做身份隔离,–remote-debugging-port 让 OpenClaw 通过端口接入不同店铺。
核心代码不到 30 行。三个关键参数,缺一个就瘫痪:
--password-store=basic # Mac 专属:防钥匙串串号
--remote-allow-origins=* # Chrome 148+ 必加:否则 CDP 403
--disable-blink-features=AutomationControlled # 反爬基础:隐藏自动化痕迹
如果这三个参数只记得一个——记 –remote-allow-origins=*。这个参数加晚了连都连不上,后面的优化都无从谈起。
最后说个实在的:这套方案不替代人工。Cookie 还是会过期,验证码还是偶尔来。但它解决了 OpenClaw 多店铺场景下最基础的问题——同时在线、互不干扰、按需操控。每天省下来的那半小时登录切号时间,对用 AI 做电商运营[7]的团队来说,就是质的提升。
引用链接
[1]AI 自动化: https://www.aiec.fun/tag/ai-%25e8%2587%25aa%25e5%258a%25a8%25e5%258c%2596/
[2]为什么: https://www.aiec.fun/tag/%25e4%25b8%25ba%25e4%25bb%2580%25e4%25b9%2588/
[3]http://127.0.0.1:9230
[4]CloakBrowser: https://www.aiec.fun/tag/cloakbrowser/
[5]安全策略: https://www.aiec.fun/tag/%25e5%25ae%2589%25e5%2585%25a8%25e7%25ad%2596%25e7%2595%25a5/
[6]Playwright: https://www.aiec.fun/tag/playwright/
[7]电商运营: https://www.aiec.fun/tag/%25e7%2594%25b5%25e5%2595%2586%25e8%25bf%2590%25e8%2590%25a5/
夜雨聆风