乐于分享
好东西不私藏

OpenClaw 多店铺浏览器操作部署实战

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/