1. Hermes Agent 接入 Scrapeless 反检测网络代理的真实场景如果你正在用 Hermes Agent 做公开数据采集大概率遇到过这种情况本地 Chromium 打开目标页面返回的不是内容而是一个 Cloudflare Turnstile 验证页或者干脆卡在 JavaScript 渲染的白屏上。Hermes Agent 本身是 Nous Research 出的开源自主代理带持久记忆、自主技能创建和多渠道网关内置的浏览器工具基于无障碍树模型把页面渲染成带 e1、e2、e3 交互引用的文本快照LLM 针对这些引用做导航和表单填写。这套机制在文档查找、基础导航上很好用但商业网站是另一层表面。Cloudflare Turnstile、reCAPTCHA、Akamai Bot Manager、IP 声誉列表以及只支持 JavaScript 的单页应用横在自动化客户端和大量零售商、市场、搜索结果页之间。本地 Chromium 不带任何辅助很容易被这些层识别为自动化流量。代理本来能完成的工作流——从类目页提取定价、监控公开列表页、填写登录后的表单、为下游 RAG 抽取输入数据集——往往在第一个过渡页就卡住了。Scrapeless Scraping Browser 是通过 Chrome DevTools 协议暴露的反检测云浏览器提供覆盖 195 个国家的居民代理网络并在每个会话随机化浏览器指纹。Hermes 的浏览器工具已经支持 CDP所以集成只需要在~/.hermes/config.yaml里加一行browser.cdp_url。不需要装 SDK不需要 CLI 子进程代理端也不用改代码。每个 Hermes 浏览器操作——browser_navigate、browser_snapshot、browser_click、browser_type、browser_scroll、browser_press、browser_get_images、browser_vision——都在 Scrapeless 云浏览器里执行背后是居民代理每个会话带抗检测指纹。这篇文章面向需要稳定采集公开数据的自动化场景给出可复制的 CDP 连接参数、代理会话配置与请求头设置并附连通性验证与反检测效果自检步骤。适合已经在用 Hermes Agent、想把手上的采集链路从本地 Chromium 迁到云浏览器的人也适合想理解 CDP 集成反检测网络代理到底怎么落地的人。下面从环境准备一路走到排障每一步都能单独验证。2. TaoToken 前置准备与 Hermes Agent 环境搭建在动 Scrapeless 之前先把 Hermes Agent 和模型通道准备好。Hermes 对模型提供方没有强依赖Nous Portal、OpenRouter、NVIDIA NIM、小米 MiMo以及任何 OpenAI 兼容端点都能接。如果你希望模型调用和浏览器采集走同一套稳定的接入层可以用 TaoToken 作为 OpenAI 兼容端点官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。它的作用是给 Hermes 提供一个统一的模型入口省去在多个提供方之间来回切换配置的麻烦。先装 Hermes Agent。官方安装脚本支持 Linux、macOS、WSL2 和 Android 上的 Termuxcurl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash首次启动会跑设置向导。运行时要求 Python 3.11 或更高版本先确认一下python3 --version # 期望输出Python 3.11.x 或更高接下来准备模型通道。如果你用 TaoToken去控制台创建一个 API Key地址是 https://taotoken.net/console 然后在 Hermes 的模型配置里填 OpenAI 兼容端点。模型 ID 按你实际要用的填比如claude-sonnet-4-5这类具体以控制台可用列表为准。配置片段大致如下路径以 Hermes 实际读取的配置文件为准# ~/.hermes/config.yaml 模型部分示例 model: provider: openai-compatible base_url: https://taotoken.net/api api_key: ${TAOTOKEN_API_KEY} model_id: claude-sonnet-4-5把 Key 放到环境变量里别写死在 YAML# macOS / Linux写入 ~/.zshrc 或 ~/.bashrc export TAOTOKEN_API_KEY你的_taotoken_key source ~/.zshrc# Windows PowerShell用户作用域持久化 [Environment]::SetEnvironmentVariable(TAOTOKEN_API_KEY, 你的_taotoken_key, User)然后是 Scrapeless 侧。注册一个 Scrapeless 账户进仪表盘在设置 → API 密钥管理里创建一个 Key复制出来。这个 Key 后面会作为token查询参数拼进 WSS 端点。Scrapeless 的免费计划可以先用起来验证链路确认能跑通再考虑升级。到这里你手上应该有三样东西一个能启动的 Hermes Agent、一个可用的模型通道TaoToken 或你已有的提供方、一个 Scrapeless API Key。三样齐了再往下走否则后面排障会分不清是模型问题还是浏览器问题。我试过在模型通道没配好的情况下直接调浏览器工具结果代理一直不返回排查半天才发现是模型侧超时跟 CDP 没关系。3. 可复制的 CDP 连接参数与代理会话配置核心配置就一行。打开~/.hermes/config.yaml如果文件不存在就创建加上browser.cdp_url# ~/.hermes/config.yaml browser: cdp_url: wss://browser.scrapeless.com/api/v2/browser?tokenYOUR_SCRAPELESS_API_KEYproxyCountryUSsessionTTL600这一行把每个 Hermes 浏览器工具调用都路由到 Scrapeless 云浏览器。Hermes 用来标记 e1、e2、e3 的无障碍树表示是从云浏览器的渲染里生成的所以现有的提示词和技能不用改。三个查询参数承担大部分工作对照表如下参数作用取值说明tokenScrapeless API 密钥必填从仪表盘设置 → API 密钥管理复制proxyCountry居民代理出口国家ISO-3166 alpha-2如 US、DE、JP、GB默认全球池sessionTTL云浏览器在最后一条命令后保持活跃的秒数范围 60–900多步流程用高值一次性提取用 60sessionName会话名用于跨轮次复用同一热浏览器多步流程建议固定如tokyo-researchsessionRecording开启会话录制设为true仪表盘会生成可重放视频推荐把 Key 放在配置文件之外用${VAR}替换。Hermes 配置支持变量插值先导出一次再从 URL 引用# macOS / Linux export SCRAPELESS_API_KEYyour_api_token_here source ~/.zshrc# Windows PowerShell [Environment]::SetEnvironmentVariable(SCRAPELESS_API_KEY, your_api_token_here, User)然后更新配置browser: cdp_url: wss://browser.scrapeless.com/api/v2/browser?token${SCRAPELESS_API_KEY}proxyCountryUSsessionTTL600如果不想持久化也可以在当前会话用 CLI 临时连/browser connect wss://browser.scrapeless.com/api/v2/browser?tokenYOUR_SCRAPELESS_API_KEYproxyCountryUS多步流程、需要保持 cookie 和滚动位置的场景把 TTL 拉高并固定会话名。比如东京出口、15 分钟热会话、可重放视频browser: cdp_url: wss://browser.scrapeless.com/api/v2/browser?token${SCRAPELESS_API_KEY}proxyCountryJPsessionTTL900sessionNametokyo-researchsessionRecordingtrue请求头这块Scrapeless 云浏览器会处理用户代理、时区、语言、屏幕分辨率等指纹参数你不需要在 Hermes 侧手动塞一堆 header。真正需要你控制的是出口国家和会话生命周期这两个通过 URL 查询参数表达就够了。如果你确实要自定义指纹走 Scrapeless 的自定义指纹功能而不是在 Hermes 里硬改 header否则容易和云浏览器的指纹策略打架。配置改完重启 Hermes 让它重新读取。这一步别省我踩过的坑就是改了 YAML 没重启代理还在用旧的本地 Chromium白白怀疑了半天反检测没生效。4. 连通性验证与反检测效果自检配置好之后先做最小连通性验证。重启 Hermes然后对代理说打开 https://example.com 并告诉我 H1 标题文本。成功的话会返回Example Domain。这一步验证的是 CDP 拨号、云浏览器启动、无障碍树快照这条链路通不通。如果代理报ERR_TUNNEL_CONNECTION_FAILED、401或者在browser_navigate上挂起最常见的原因是 API Key 错、代理区域写错或者 WSS URL 里粘进了多余空格。连通性过了再验证反检测效果。找一个带反爬保护的公开页面比如搜索结果页或电商类目页让代理执行从美国出口打开 https://example.com/products返回标题、价格、评分、评论数量格式为 JSON。代理内部会走browser_navigate→browser_snapshot→ 结构化提取。browser_snapshot是支撑调用它把 CDP 风格的实时页面转成 LLM 能逐步推理的文本每个交互引用 e1、e2、e3 都带周围文本。如果返回的是挑战页而不是目标内容说明反检测没完全生效往下看排障。自检清单可以按这个顺序走第一确认出口国家。在提示里明确说“使用德国出口”代理会在 WSS URL 上用proxyCountryDE重启会话。地理限制的列表页出口不对会直接返回空或重定向。第二确认会话是否复用。多步流程如果每次调用都新建会话cookie 和滚动位置会丢。把sessionTTL设到 300–900给一个稳定的sessionName调用之间别重启连接。第三确认渲染是否完成。单页应用通过次级 XHR 水合内容快照可能早于最终 DOM。让代理browser_scroll一下再重新快照懒加载面板才会出现。第四开录制看真相。在 WSS URL 后加sessionRecordingtrue每次运行都会在 Scrapeless 仪表盘生成可重放视频。空提取或意外插屏从头到尾都能看见不用给代理加埋点。验证模型通道是否正常可以走 https://taotoken.net/models 用模型对话确认返回如果长期跑编码或 Agent 任务可以考虑 https://taotoken.net/coding-plan 这类方案把模型调用和采集链路分开管理。5. 本篇常见报错排查401、local proxy failed、reading choices、OAuth排障这块按真实报错来对。下面这些是我和身边人实际撞到过的逐条给原因和动作。401 Unauthorized出现在 CDP 拨号阶段。原因基本是token参数不对Key 复制时带了空格、Key 被撤销、或者环境变量没生效导致 URL 里是字面量${SCRAPELESS_API_KEY}。检查方式是打印实际拼出来的 URL确认 token 段是真实 Key。如果用了${VAR}替换确认 Hermes 进程能读到那个环境变量Windows 下用户作用域变量需要重开终端。ERR_TUNNEL_CONNECTION_FAILED或os error 10054。这两个是临时的会话启动错误通常重试就好。反爬基础设施有时会在浏览器完全启动前重置新会话。重新发一次失败的提示即可生产工作流里把失败提示包一个小重试循环指数退避 2 秒、5 秒、15 秒。local proxy failed这类报错多半是出口国家参数和会话配置冲突或者proxyCountry填了不存在的代码。确认用的是 ISO-3166 alpha-2 两位代码比如US、DE、JP、GB别写成USA或us。改完重新/browser connect生成新会话。reading choices报错通常出现在模型侧不是浏览器侧。Hermes 调模型返回的结构里没有choices字段常见原因是模型通道的 base_url 或 model_id 配错或者 Key 失效。如果你用 TaoToken确认base_url是https://taotoken.net/apimodel_id是控制台里真实可用的 ID。这个错和 CDP 无关别往浏览器方向查。OAuth相关报错出现在需要登录态的采集场景。Hermes 本身不替你管第三方 OAuth登录态靠云浏览器的会话持久性维持。把sessionTTL设高、固定sessionName、调用之间不重启连接云浏览器会在会话生命周期内保持同一浏览器配置文件、cookie 和滚动位置。如果 OAuth 流程跨多个代理轮次确保每一轮都复用同一个会话名。选择器失效、DOM 旋转的问题别用 CSS 选择器切原始 HTML。用browser_snapshot无障碍树表示在布局漂移中更稳定代理每轮重新发现引用而不是依赖硬编码路径。网站加了新列或改了按钮名重新提示代理发现引用别把它写进保存的技能里。并发方面Scrapeless 没有公布固定的每主机并发上限速率限制在平台级处理。多主机管道每个主机跑独立代理循环别集中打单个域。扩之前先在仪表盘确认你账户层级的并发限制。如果你在配置里同时用了 CC Switch、Cline MCP 或 Codex 的auth.json记住三件套要写全Base URL、Key、Model ID。缺任何一个都会在模型侧报错表现和 CDP 问题很像容易误判。6. 把采集链路固定下来从验证到长期运行链路验证通过之后接下来是让它稳定跑。几个实用做法。把区域和会话策略按目标站点分类。搜索结果页、按市场区分的电商、酒店航班预订、本地商业目录这些因出口区域而变的列表目标把proxyCountry钉到目标区域。分页搜索结果、登录后仪表盘、多页表单这类多步流程把sessionTTL设高并复用sessionName。录制是无人值守管道的高杠杆开关。sessionRecordingtrue让每次运行在仪表盘里变成可点击视频代理报告提取为空时你能直接看到云浏览器实际渲染了什么。先确认你的计划是否包含录制。提取模式上坚持发现 → 提取先browser_navigate再browser_snapshot拿到引用和周围文本再让模型挑字段返回结构化记录。没有 CSS 选择器没有 JS 求值快照里已经有模型需要的数据。视觉复杂的页面——价格表嵌成图片、图表、信息图——用browser_vision把截图发给多模态模型作为逃生通道。如果你不用 HermesScrapeless 的 WSS 端点是普通 CDP任何 Puppeteer 或 Playwright 脚本都能通过puppeteer.connect({ browserWSEndpoint: ... })或chromium.connectOverCDP(...)连上同一个云浏览器。当基于聊天的研究或多渠道覆盖重要时Hermes 是推荐路径CDP 端点是更低级别的备用选项。任何支持自定义 CDP 端点的代理都能接同一个 WSS 端点集成的表面是协议不是客户端。模型通道这边长期跑的话把 Key 管理好别散落在多个配置文件里。TaoToken 的接入文档在 https://taotoken.net/doc API Key 管理在 https://taotoken.net/api-keys 需要新建或轮换 Key 时从那里操作。Claude Code 相关的接入可以参考 https://taotoken.net/claude-code-anthropic 。把模型调用和浏览器采集分成两层管理出问题时能快速定位是哪一层。最后一步把上面验证过的配置固化成一个可复现的模板一份~/.hermes/config.yaml的 browser 段、一份环境变量清单、一份按站点分类的区域和 TTL 策略表。下次换目标站点改proxyCountry和提示词就行链路本身不用动。