Hermes 配置 CamoFox 浏览
一步步把这套“开机自启 + 免扫码登录”的自动化堡垒搭建起来。
整个过程分为 “部署服务”、“配置持久化”、“设置自启” 和 “首次登录” 四个阶段。请跟着我的节奏,直接复制粘贴命令即可。

第一阶段:部署与试跑 CamoFox
首先,我们需要把 CamoFox 安置到你的服务器上,并确保它能正常跑起来。
- 下载代码并进入目录:
bash
# 前缀https://ghfast.top是国内代理的方式clone
git clone https://ghfast.top/https://github.com/jo-inc/camofox-browser.git
cd camofox-browser
- 安装依赖(首次会下载约 700MB 的底层浏览器):(一般人+无VPN, 只这里就要耗至少8个小时啊........., 呵呵, 我在元宝的班助下, 花了16个小时, 哭了)
```bash # 如果下载慢, 用手动下载安装的方式吧 # 首先, 用相对快的方法下载最新版本 : https://github.com/daijro/camoufox/releases # 下载压缩包 (Linux 64位专用) wget https://github.com/daijro/camoufox/releases/download/v135.0.1-beta.24/camoufox-135.0.1-beta.24-lin.x86_64.zip
# 1. 创建目录
mkdir -p /home/chenlip/camoufox
# 2. 将压缩包移动并解压到该目录, 其实应该是可以用150.0.2版本的, 被元宝带得偏到银河系了.........
cd ~/camofox-browser
unzip ~/camoufox-135.0.1-beta.24-lin.x86_64.zip -d /home/chenlip/camoufox
# 3. 关键步骤:创建 version.json 文件,告诉程序用哪个版本
echo '{"version": "135.0.1", "release": "beta.24"}' > /home/chenlip/camoufox/version.json
# 4. 设置camoufox的执行文件路径, 免得npm 安装的时候要去git下载.
export CAMOUFOX_EXECUTABLE=/home/chenlip/camoufox/camoufox-bin
# 创建软链接
ln -s fontconfigs fontconfig
npm install
```
- 手动启动测试一下:
```bash cd ~/camofox-browser npm start
# 到这里好像都正常啊, 高兴啊, 好像有点小瑕疵:(你很可能看到, 于是查了一下, 这只是个扩展而已, 没有VPN下载不到而已, 应该不影响啊)
Failed to download and extract UBO: Error: Failed to download from https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi after 5 attempts
``
*看到终端显示"server started","port":9377,"pid":33649,"nodeVersion":"v24.15.0"就说明 应该是 成功了!此时按Ctrl+C` 停掉它,我们接下来要去配置 Hermes。*
大坑来了啊.........................................................................; 当我再次npm start , 发现怎么都起不来了啊, 报错:
```bash
{"ts":"2026-05-19T13:49:52.784Z","level":"warn","msg":"camoufox launch attempt failed","attempt":1,"maxAttempts":1,"error":"manifest.json is missing. Addon path must be a path to an extracted addon.","proxySession":null}
{"ts":"2026-05-19T13:49:52.784Z","level":"error","msg":"browser pre-warm failed (will retry in background)","error":"manifest.json is missing. Addon path must be a path to an extracted addon."}
```
看不出来到底是哪里出问题, 字面意思: manifest.json 这个文件没找到. 扩展的插件的路径应该是一个解压的插件, 应该是这个意思,
然后我就是疯狂找问题啊,
于是清理-->卸载--> 再安装 --> 再试, 死循环N次, (4小时)
后来无意中看到 ~/.cache/camofox/ 目录下有一个Addons目录, 随手点开看看 , 发现有一个 UBO 的空目录, 我就想会不会是因为下载失败就空了, 于是我就删除了这个目录, 在启动 npm start , 竟然成功启动了啊, 啊啊啊啊啊啊啊啊啊啊 , 找到问题原因了, 因为下载失败, 产生空目录, 而camofox-bin程序以为有UBO目录就说明有扩展, 就死命(死循环的加载), 于是就崩了..........; 估计老外的测试没有经过国内的网络环境, 这个BUG就怎么都发现不了啊.......................; 这个BUG和解决对策不知道能不能卖钱啊...............
```bash
国内网络使用xget从github中下载uBlock0_1.71.0.firefox.xpi
wget https://xget.xi-xu.me/gh/gorhill/uBlock/releases/download/1.71.0/uBlock0_1.71.0.firefox.xpi
.xpi 转.zip
cd /home/chenlip/camofox cp uBlock0_1.71.0.firefox.xpi uBlock0_1.71.0.firefox.zip
解压文件
mkdir -p ubo-tmp unzip uBlock0_1.71.0.firefox.xpi -d ubo-tmp
进入容器中找到UBO目录
docker exec -it camofox /bin/bash
找到UBO目录
find / -type d -name "UBO" 2>/dev/null
/root/.cache/camoufox/addons/UBO
docker cp /home/chenlip/camofox/ubo-tmp/. camofox:/root/.cache/camoufox/addons/UBO
完美解决
隐患, 不知道这个.cache/camoufox/addons/UBO 会不会, 再未来某个时刻, 有什么机制会将它清除啊............;
```
保险的方式:
通过浏览器界面加载 (临时测试):
- 在 Camoufox 地址栏输入并访问
about:config,接受风险提示,搜索xpinstall.signatures.required并设置为false, 然后使用界面增加扩展, 选择xpi文件, 成功, 成功, 成功........................................
第二阶段:配置 Hermes 开启“身份记忆”
为了让 CamoFox 记住你的登录状态(Cookie),我们需要在 Hermes 的配置文件里开启它的“记忆功能”。
- 打开 Hermes 的配置文件 (通常在
~/.hermes/config.yaml,如果使用的是项目根目录的config.yaml也可以):
bash
nano ~/.hermes/config.yaml
- 修改
camofox相关的配置项,确保它长这样:
yaml
browser:
# ... 其他配置保持不变 ...
camofox:
managed_persistence: true # <--- 核心!开启此项会强制在后台保存和恢复 Cookie
user_id: '' # 留空即可,Hermes 会自动管理
session_key: '' # 留空即可
adopt_existing_tab: false # 建议保持 false,避免干扰
按 Ctrl+O 回车保存,再按 Ctrl+X 退出。
- 设置环境变量指向 CamoFox:
编辑你的
.env文件(通常在 Hermes 项目根目录或~/.hermes/.env):
bash
echo "CAMOFOX_URL=http://127.0.0.1:9377" >> ~/.hermes/.env
(注:如果你在第一步测试时修改过 CAMOFOX_PORT,这里的端口也要对应修改)
第三阶段:设置 Systemd 开机自启
现在我们利用 Ubuntu 原生的 Systemd 把 CamoFox 变成系统级后台服务。
- 创建服务文件:
bash
sudo nano /etc/systemd/system/camofox.service
- 将以下内容原封不动地复制进去 (它会自动处理路径和用户权限):
```ini [Unit] Description=Camofox Headless Browser Service After=network.target
[Service]
Type=simple
User=chenlip
WorkingDirectory=/home/chenlip/camofox-browser
ExecStart=/opt/nodejs/current/bin/npm start
Restart=always
RestartSec=10
Environment="NODE_ENV=production"
Environment="PATH=/opt/nodejs/current/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Environment="CAMOUFOX_EXECUTABLE=/home/chenlip/camoufox/camoufox-bin"
Environment="CAMOFOX_PROFILE_DIR=/home/chenlip/camoufox/hermes-profiles"
[Install]
WantedBy=multi-user.target
StandardOutput=journal
StandardError=journal
``
*(再次提醒:WorkingDirectory和User` 必须和你实际的路径、用户名完全一致!, npm的路径也一点要准确哦 )*
- 刷新配置、开启自启并启动服务: 依次执行以下三条命令:
bash
sudo systemctl daemon-reload
sudo systemctl enable camofox
sudo systemctl start camofox
- 验证服务是否正常运行:
bash
sudo systemctl status camofox
如果看到 active (running),恭喜你,后台服务已经稳稳跑起来了!并且以后每次重启服务器,它都会自动在后台静默运行。
第四阶段:进行一次人工“投喂”(扫码登录)
由于开启了 managed_persistence,我们现在只需要让 Agent 在 CamoFox 里进行一次人工登录,以后它就能自己记住身份了。
你可以通过两种方式完成这次“初次见面”:
方法 A:写一个临时的 Playwright 脚本(最稳妥)
在 Hermes 项目外新建一个 login.js,用几行代码让 CamoFox 打开目标网站并暂停,等你扫码:
const { chromium } = require('playwright');
(async () => {
// 连接到你的 CamoFox 后台
const browser = await chromium.connect('http://127.0.0.1:9377');
const page = await browser.newPage();
// 1. 打开小红书或头条的登录页
await page.goto('https://www.xiaohongshu.com/explore');
// 2. 弹出一个实际可见的浏览器窗口(方便你用手机扫码)
// 注意:如果你的 Ubuntu 没有图形界面,这需要配合 X11 转发或直接使用方法 B
await page.waitForTimeout(3600000); // 等待一小时,足够你慢慢扫码了
})();
运行 node login.js,在弹出的窗口里完成扫码,然后关掉它。
方法 B:直接给 Hermes Agent 下指令(最省事) 直接在 Hermes 的 Chat 界面输入:
"请使用CamoFox工具打开小红书主页,并等待我完成人工扫码登录。"
Agent 会通过 CamoFox 发起请求。由于这是第一次访问,网站会跳出登录二维码。此时你需要借助一些技巧:
如果是带图形界面的 Ubuntu:Agent 可能会尝试截图给你看,或者你可以临时用 journalctl -u camofox -f 查看日志里有没有打印出链接。
更简单粗暴的方法:在指令里补充要求 Agent 把登录页面的 URL 直接以文本形式发给你,你复制到自己日常用的电脑浏览器里打开并扫码。
🎉 最终验收
完成上述步骤后,重启一下你的服务器 (sudo reboot)。
重启完毕后,执行两步走验证:
1. 检查服务状态:sudo systemctl status camofox (应该自动跑起来了)
2. 让 Hermes Agent 去抓取一条你只有登录后才能看到的个人信息或私信。
如果一切顺利,Agent 直接返回了正确的私密数据,说明你的 CamoFox 免扫码堡垒已经彻底竣工!从此以后,你的自动化抓取业务就可以 24 小时无忧无虑地运转了。
附加: 使用docker compose 部署CamoFox
国内环境拉取jo-inc/camofox-browser, 这个基本不可能, 2026-05-28, 总算我找到一个代理可以使用,
# 先拉取镜像
# docker pull ghcr.nju.edu.cn/jo-inc/camofox-browser:latest
# 打标签
# docker tag ghcr.nju.edu.cn/jo-inc/camofox-browser:latest ghcr.io/jo-inc/camofox-browser:latest
编写一个docker-compose.yaml
services:
camofox:
image: ghcr.io/jo-inc/camofox-browser:latest
container_name: camofox
restart: unless-stopped
ports:
- 9377:9377
environment:
- CAMOFOX_PORT=9377
- CAMOFOX_PROFILE_DIR=/home/node/.local/state/camofox/profiles
- CAMOFOX_COOKIES_DIR=/home/node/.local/state/camofox/cookies
volumes:
- ./camofox-data:/home/node/.local/state/camofox
启动docker compose
docker compose up -d
功能与能力
是的,完全支持!请你放心。
CamoFox 本质上是一个经过深度伪装的远程浏览器引擎。一旦它通过 Systemd 在后台运行,它就可以被 Hermes 当作一个标准的浏览器后端来调用,为你提供极其完整的网页自动化能力。
无论是简单的爬虫,还是复杂的网页交互,它都能完美胜任。具体来说,它为你提供以下四大核心能力:
1. 数据抓取与爬虫 (Scraping & Crawling)
- 静态与动态内容抓取:它可以执行 JavaScript,等待页面完全加载后再提取数据。这对于小红书、头条这种大量使用 Vue/React 前端框架的动态网站来说是刚需。
- 智能等待:可以精准等待某个特定的 DOM 元素出现后再进行抓取,避免因网络延迟导致的空数据。
- 分页与滚动加载:支持模拟无限滚动(比如一直滑到小红书首页底部),或者自动点击“下一页”按钮。
2. 视觉与媒体处理 (Screenshots & Media)
- 整页截图:可以截取完整的网页长图(Full Page Screenshot),非常适合用来存档竞品的首页布局或文章详情。
- 元素级截图:可以精准截图页面上的某一个特定元素(比如只截图某条微博或某个商品卡片)。
- PDF 生成:支持将网页直接转换为 PDF 文件保存。
3. 鼠标与键盘交互 (Clicking & Typing)
- 精准点击:支持单击、双击、右键点击,甚至支持在指定的坐标位置点击。
- 文本输入:模拟真实的键盘输入,支持在搜索框、文本框、富文本编辑器中填写内容。
- 文件上传:可以自动化处理
<input type="file">标签,自动将本地文件上传到网页。
4. 高级页面操作 (Navigation & Beyond)
- 多标签页管理:可以自动打开新标签页,或者在多个标签页之间切换、关闭。
- 拦截与监听:可以拦截网络请求(比如过滤掉烦人的广告请求以加速加载),或者监听网页发出的 API 接口调用,直接抓取接口返回的 JSON 数据(这比抓取网页元素更高效)。
💡 实战演示:在 Hermes 中如何指挥 CamoFox?
为了让你更有体感,这里举几个你可以直接对 Hermes Agent 下达的指令示例。Hermes 会自动将这些自然语言转化为对 CamoFox 的底层操作:
-
场景一:竞品数据抓取
你:“去头条搜索‘新能源汽车’,把前 5 篇文章的标题、发布时间和阅读量整理成表格发给我。” Agent 的行动:控制 CamoFox 打开头条 -> 在搜索框输入关键词 -> 点击搜索 -> 等待结果加载 -> 循环提取前 5 条数据的文本 -> 格式化输出。
-
场景二:自动化填表与发布
你:“打开小红书,点击发布笔记按钮,标题写‘今日穿搭’,内容随便写一句,然后取消发布。” Agent 的行动:点击加号 -> 等待弹窗 -> 定位标题输入框并键入文字 -> 定位正文输入框并键入文字 -> 点击取消/关闭。
-
场景三:可视化存档
你:“访问我的个人创作中心,等页面完全加载后,帮我截一张全屏长图,保存到 downloads 目录下。”
⚠️ 核心优势与避坑指南
你选择 CamoFox 而不是普通的 Local Chrome,最核心的原因在于它的反机器人检测(Anti-Bot)能力。但在实际操作中,有一个关键点需要注意:
即使是 CamoFox,如果操作太快、太机械,依然可能被封! 比如:瞬间填完表单、毫秒级点击按钮、固定间隔滚动页面。这些行为特征依然会暴露你是“非人类”。
最佳实践建议: 在给 Hermes 下达复杂操作指令时,明确加上“拟人化”的约束条件。例如:
“请在搜索框缓慢输入‘竞品分析’,随机停顿1到2秒后再点击搜索。页面滚动时,请分段向下滑动,每次滑动后停留几秒等待图片加载。”
总结来说,CamoFox 为你提供了一辆底盘极其扎实、带有防弹玻璃的越野车(隐藏了底层指纹、防止 IP 被封),而 Hermes 则是这辆车的驾驶员。只要你在指挥驾驶员时稍微注意一点“交规”(模拟人类行为),你就可以在这辆车上安稳地完成几乎所有你想做的网页自动化任务。