Hermes Agent代理 + Scrapeless:用于反检测网络代理的CDP集成
Hermes Agent 的浏览器工具原生支持 Chrome DevTools 协议——只需一行配置即可将其连接到 Scrapeless Scraping Browser,以便在 195 个国家使用住宅代理、JS 渲染和反机器人指纹识别。本文将介绍设置、提示以及发现→提取模式,使基于聊天的研究、潜在客户生成和监控工作流程在 Telegram、Discord 或 CLI 中做好生产准备。
主要要点:
- 一行配置集成。 Nous Research 的 Hermes Agent 具有内置的浏览器工具,已经支持 Chrome DevTools 协议。将其指向 Scrapeless Scraping Browser 只需在
~/.hermes/config.yaml中增加一行browser.cdp_url。无需安装 SDK,无需 CLI 子进程,无需在代理端进行代码更改。 - 每个 Hermes 浏览器操作在 Scrapeless 云浏览器中运行。
browser_navigate、browser_snapshot、browser_click、browser_type、browser_scroll、browser_press、browser_get_images和browser_vision都在 Scrapeless 云浏览器内执行,背后有居民代理,并且每个会话都有抗检测指纹识别。 - 多渠道触达。 Hermes 的网关通过 Telegram、Discord、Slack、WhatsApp、Signal、电子邮件和 CLI 暴露代理。通过 Scrapeless 集成,云浏览器成为任何基于聊天的研究、潜在客户生成或监控工作流程的后端,而无需暴露单独的抓取端点。
- 抗检测云浏览器,覆盖195个国家的居民代理。 Scrapeless Scraping Browser 处理 JavaScript 渲染、居民代理的出站、浏览器指纹自定义(用户代理、时区、语言、屏幕分辨率)和会话持久性,因此代理可以专注于任务本身,而不是访问基础设施。
- 直接 CDP 集成。 将 Hermes 的浏览器工具指向 Scrapeless WSS 端点就是全部连接——无需技能嵌入,无需 SDK,无需子进程。
引言:从本地 Chromium 到强固的云浏览器
Hermes Agent 是一个具有持久记忆、自主技能创建和多渠道网关的开源自主代理。开箱即用,它提供一个使用无障碍树模型的浏览器工具——页面渲染为带有交互元素标签 @e1、@e2、@e3 的文本快照,LLM 驱动针对这些引用的导航和表单填写。这在文档查找和基本导航任务中表现良好。
商业网络是一个不同的表面。Cloudflare Turnstile、reCAPTCHA、Akamai Bot Manager、IP 声誉列表和仅支持 JavaScript 的单页应用程序位于自动化客户端与许多零售商、市场和搜索结果页面之间。运行不带帮助的本地 Chromium 很容易被这些层识别为自动化流量。代理本可以完成的工作流程——从类别页面提取定价,监控公共列表页面,填写身份验证后的表单,为下游 RAG 提取输入数据集——在第一个过渡页面卡住了。
Scrapeless Scraping Browser 是通过 Chrome DevTools 协议暴露的抗检测云浏览器。它提供了一个覆盖 195 个国家的居民代理网络(根据 Scrapeless 的文档)并在每个会话中随机化浏览器指纹。Hermes 的浏览器工具已经支持 CDP。集成只需一行配置。本文将介绍连接、代理将接受的提示以及跨站点扩展的发现 → 提取模式。
为什么选择 Scrapeless Scraping Browser
Scrapeless Scraping Browser 是一个可定制的抗检测云浏览器,专为网页爬虫和 AI 代理设计。对于 Hermes Agent 特别而言,它提供:
- Chrome DevTools 协议表面 — Hermes 的浏览器工具已经支持 CDP。云浏览器可以无缝应用于相同的工具调用,而无需重新编译、配置蔓延或新代码路径。
- 覆盖 195 个国家的居民代理 — 地理限制查询返回本地用户所见的列表,每个会话都有旋转且无需每请求设置。
- 云端 JavaScript 渲染 — 页面在提取之前完全加载,因此单页应用程序、无限滚动 feeds 和懒加载面板是
browser_snapshot和browser_vision的一流目标。 - 浏览器指纹自定义 — 核心参数(用户代理、时区、语言、屏幕分辨率)可以根据每个 Scrapeless 的文档进行每会话配置;在保持一致性时,通过 Scrapeless 的自定义指纹功能可以获得一致的身份。
- **通过
sessionTTL(60–900 秒)和 WSS 端点上的sessionName查询参数实现会话持久性,因此多步 Hermes 流程在工具调用之间可以重用相同的热浏览器、cookie 和滚动位置。 - 单一管理界面 — 一个 API 密钥、一个云账户,以及用于重放的仪表盘录制。
在 Scrapeless 的注册页面 免费计划中获取您的 API 密钥,并加入我们的官方社区。
Scrapeless 官方 Discord 社区
Scrapeless 官方 Telegram 社区
先决条件
- Hermes Agent已安装。 官方安装程序支持Linux、macOS、WSL2和Android上的Termux:
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash。首次启动时将运行设置向导。 - 一个Scrapeless账户和API密钥 — 请在Scrapeless注册并从设置 → API密钥管理中复制密钥。
- Python 3.11或更高版本 — Hermes的运行时要求。
- 一个聊天模型API密钥 — Hermes对提供者没有依赖(Nous Portal、OpenRouter、NVIDIA NIM、小米MiMo以及任何自定义的OpenAI兼容端点)。配置Hermes已经连接的任何提供者。
- 对编辑
~/.hermes/config.yaml或运行Hermes的CLI子命令有基本了解。
安装
完整的设置分为四个子步骤。每一步都是独立可验证的,因此您可以在继续之前暂停并确认。
1. 获取Scrapeless API密钥
请在Scrapeless注册,打开仪表板,然后在设置 → API密钥管理中创建一个密钥。复制该值 — 它将在第2步放入Hermes配置中。
2. 将Hermes的浏览器工具指向Scrapeless WSS端点
打开~/.hermes/config.yaml(如果不存在请创建该文件),并添加browser.cdp_url行。Scrapeless CDP端点接受API密钥、代理国家和会话TTL作为查询参数:
# ~/.hermes/config.yaml
browser:
cdp_url: "wss://browser.scrapeless.com/api/v2/browser?token=YOUR_SCRAPELESS_API_KEY&proxyCountry=US&sessionTTL=600"
这一行将每个Hermes浏览器工具调用 — browser_navigate、browser_snapshot、browser_click、browser_type、browser_scroll、browser_press、browser_get_images、browser_vision — 通过Scrapeless云浏览器路由。Hermes用于标记@e1、@e2、@e3的可访问性树表示是从云浏览器的渲染中生成的,因此现有的提示和技能仍然可以使用。
如果手动编辑YAML不方便,可以运行CLI形式的/browser connect "wss://browser.scrapeless.com/api/v2/browser?token=YOUR_SCRAPELESS_API_KEY&proxyCountry=US"来为当前会话完成相同的操作,而无需持久化。
3. 将API密钥设置在配置文件之外(推荐)
对于共享库或多用户Shell,请保持密钥在YAML之外。Hermes配置支持${VAR}替换;只需导出密钥一次并从URL中引用它:
macOS / Linux(bash或zsh) — 添加到~/.zshrc或~/.bashrc中:
export SCRAPELESS_API_KEY="your_api_token_here"
source ~/.zshrc # 或者 ~/.bashrc
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}&proxyCountry=US&sessionTTL=600"
4. 验证连接
重新启动Hermes以便其获取新配置,然后向代理询问:
"打开 https://example.com 并告诉我H1标题文本。"
成功运行将返回"Example Domain"。如果代理报告ERR_TUNNEL_CONNECTION_FAILED、401或在browser_navigate上挂起,最常见的原因是API密钥、代理区域或粘贴了多余空格的WSS URL。
如何实际使用:提示您的代理
在配置行更改后,您通过与代理对话来驱动Scrapeless — 而不是编写CDP粘合代码。代理负责发现→提取循环,并逐个选择浏览器工具。Hermes的多通道网关意味着相同的提示可以在Telegram、Discord、Slack、WhatsApp、Signal、电子邮件或本地CLI中工作。
您可以粘贴的提示
| 您输入 | 代理执行的操作 |
|---|---|
| "打开 https://news.ycombinator.com 并返回标题、URL、作者、评分和评论计数的前五个故事,格式为JSON。" | browser_navigate → browser_snapshot → 文字提取。 |
| "比较这三家SaaS竞争对手的定价页面,并总结差异。" | 多标签导航,使用browser_get_images获取计划级别,LLM摘要。 |
"从https://example.com拉取首页和定价页面,就好像我在东京一样。" |
使用proxyCountry=JP重新启动会话(参见“固定区域”),然后渲染。 |
"观察这个Greenhouse职业页面,并告诉我哪些角色匹配staff engineer或infra。" |
导航,快照列表块,通过关键字过滤行,返回结构化行。 |
"截图https://example.com的全页并分析内容。" |
browser_navigate → browser_vision(捕获并发送给多模态模型)。 |
"在 <URL> 填写联系表格,输入我的名字、电子邮件和一条简短信息 - 但在提交之前停止,以便我可以审查。" |
快照表格,映射提示字段到 @e1/@e2/…,browser_type,截图,在提交引用处暂停。 |
| "昨日的提取结果为空 - 重新运行并启用会话录制,以便我可以重放它。" | 在 WSS URL 上使用 sessionRecording=true 重新发起相同的流程;重放链接会在 Scrapeless 仪表板中呈现。 |
"从美国出口打开 <URL> 上的亚马逊产品页面,返回标题、价格、评分、评论数量。" |
固定区域会话,快照,结构化提取。 |
提示塑造
| 表达方式 | 效果 |
|---|---|
| "使用德国出口。" | 在 WSS URL 上以 proxyCountry=DE 重新启动云浏览器会话。 |
| "保持会话活跃,持续十分钟。" | 增加 sessionTTL=600,以便多步骤流程重用同一浏览器。 |
| "启用会话录制。" | 附加 sessionRecording=true - 仪表板会显示可重放的视频。 |
| "返回markdown,而不是原始HTML。" | 代理将快照通过提取器处理并返回markdown视图。 |
| "在最终提交之前停止。" | Hermes 的内置模式 - 操作表单,截图,在提交引用处暂停。 |
以下步骤 1–5 为幕后参考。阅读一次以了解发现 → 提取模式的组成;然后信任代理将其应用于操作员从聊天中传递的任何请求。
步骤 1 — 连接到 Scrapeless 抓取浏览器
连接是来自安装步骤的 WSS URL。Hermes 浏览器工具在首次使用时拨打它,并在会话存续期间重用同一插座。
# ~/.hermes/config.yaml
browser:
cdp_url: "wss://browser.scrapeless.com/api/v2/browser?token=${SCRAPELESS_API_KEY}&proxyCountry=US&sessionTTL=600"
三个查询参数承担大部分工作:
token— Scrapeless API 密钥。必填。proxyCountry— 住宅代理国家(ISO-3166 alpha-2,例如US、DE、JP、GB)。默认为全球池;为地理限制的列表固定它。sessionTTL— 云浏览器在最后一个命令后保持活跃的时间,单位为秒。范围为 60–900。较高的 TTL 适用于多步骤流程;默认的 60 适用于一次性提取。
在首次拨号时可能会发生短暂的 os error 10054、ERR_TUNNEL_CONNECTION_FAILED 或 503,当反爬虫基础设施在浏览器完全启动之前重置新会话。重新发起失败的提示以重试;对于生产工作流程,下面的常见问题条目涵盖了显式重试模式。
步骤 2 — 使用 browser_navigate + browser_snapshot 发现
打开页面并将其作为可访问性树读取,然后提取。快照返回每个交互引用 (@e1、@e2、@e3、…) 及其周围的文本内容的文本标签 - 足够让代理在不猜测 CSS 选择器的情况下选择正确的元素。
你: 打开 https://example.com/products 并快照页面。
代理: browser_navigate "https://example.com/products"
browser_snapshot
[返回可访问性树,@e1 = 搜索输入框,@e2 = 排序下拉框,
@e3..@e22 = 产品卡片,包含标题 + 价格 + 评分引用]
browser_snapshot 是支撑调用。它将 CDP 风格的实时页面转变为 LLM 可以逐步推理的内容。如果跳过它,代理必须退回到切割原始 HTML,这样做更脆弱且使用更多令牌。快照是发现步骤在发现 → 提取模式中;下面的每个提取假设它首先运行。
步骤 3 — 使用结构化提示提取
手中拿着快照,提取就是一个常规的 LLM 工具调用:代理读取引用及其周围文本,挑选所需字段并返回一个已类型化的记录。没有 CSS 选择器,没有 JS 评估 - 快照已经包含模型所需的数据。
你: 从快照中返回前 10 个产品,格式为 JSON,包含标题、价格、评分和产品 URL。
代理: [返回包含 10 行的 JSON 数组;缺失字段为 null]
对于非平凡页面(多标签目录、无限滚动源、A/B 渲染变体),使用 browser_scroll 补充快照以激活懒加载面板,然后重新快照。云浏览器处理 JS 渲染;Hermes 处理循环。
步骤 4 — 驱动多步骤交互
同样的浏览器工具处理表单填写、导航链和人类审阅。模式为:快照 → 确定引用 → 操作 → 快照 → 下一个引用。
你: 打开 https://app.example.com/contact,填写姓名、电子邮件和消息,
截图表单,并在提交之前停止,以便我可以审查。
代理: browser_navigate "https://app.example.com/contact"
browser_snapshot
# @e1 [输入] "全名", @e2 [输入] "电子邮件",
# @e3 [文本区域] "消息", @e4 [按钮] "提交"
browser_type @e1 "简·多"
browser_type @e2 "jane@example.com"
浏览器类型 @e3 "你好,我想谈谈..."
浏览器视觉 # 捕获完整页面渲染以供审核
# 停止 — @e4 在人类确认捕获页面之前不会按下
第5步 — 钉住一个区域并在轮次之间保持会话
对于任何由于出口区域而变化的列表目标(Google搜索结果,按市场区分的亚马逊,酒店/航班预订,本地商业目录),将 proxyCountry 钉住到用户的目标区域。对于需要跨多个代理轮次保持温暖cookie和滚动位置的多步骤流程(分页的搜索结果,有身份验证的仪表板,多页表单),将 sessionTTL 设置得更高并重用相同的 sessionName。
# 东京出口,15分钟温暖会话,可重播视频
浏览器:
cdp_url: "wss://browser.scrapeless.com/api/v2/browser?token=${SCRAPELESS_API_KEY}&proxyCountry=JP&sessionTTL=900&sessionName=tokyo-research&sessionRecording=true"
在对话中间切换区域只需进行一次 /browser connect — Hermes 会断开当前套接字,拨打新的URL,然后下一个 browser_navigate 将通过新的出口运行。录制是无人值守管道的高杠杆标志:每次运行都会出现在Scrapeless仪表板中作为可重播视频,因此当代理报告提取为空时,操作员可以看到云浏览器实际渲染的内容。
运行此程序时对实时网络的期望
- 水合时间因网站而异。 通过次级XHR水合作用内容的单页应用可能需要在快照反映最终DOM之前进行
browser_scroll或简短等待。如果某个字段持续为null,请重新快照一次。 - 无选择器提取比CSS选择器更具弹性,但不能免疫布局漂移。 当网站添加新列或重命名按钮时,可访问性树会发生变化;请重新提示代理重新发现引用,而不是将其编码在保存的技能中。
- 反机器人插页显示为快照中的重定向。 当一个网站前置了一个云服务挑战(如Cloudflare或Akamai)而云浏览器无法透明完成时,快照会报告挑战页面而不是目标。扩大指纹或钉住不同的代理区域。
browser_vision补充browser_snapshot。 对于视觉复杂的页面(作为图像嵌入的价格表,图表,信息图),视觉工具是合适的逃生通道 — 它将截图发送到多模态模型,而不是访问文本。- 会话录制是高杠杆的。 在WSS URL上设置
sessionRecording=true将“代理做了奇怪的事情”变成Scrapeless仪表板中的可点击视频。查看定价页面以了解您的计划是否包括录制。
常见问题解答
我需要住宅代理吗?
是的,对于任何具有实质性反机器人保护的网站,这适用于大多数零售商,市场和搜索结果节点。Scrapeless WSS端点默认通过住宅池路由;proxyCountry 查询参数将出口国家固定。
第一次连接返回 ERR_TUNNEL_CONNECTION_FAILED 或 os error 10054。现在怎么办?
这两者都是暂时的会话启动错误,通常在重试时解决。重新发出失败的提示;对于必须在第一次失败时不产生反弹的生产工作流,将失败的提示包裹在一个小的重试循环中,使用指数退避(如2秒,5秒,15秒)。
一个网站返回拒绝访问。现在怎么办?
首先重试 — 反机器人层在会话重新启动后通常会清除。如果页面持续阻止,请将 proxyCountry 更改为不同区域,重新发出 /browser connect 以生成新的指纹,或联系Scrapeless支持确认封锁是在平台级别而不是帐户级别。
选择器不断失效。如何应对DOM旋转?
使用 browser_snapshot 而不是用CSS选择器切片原始HTML。可访问性树表示在布局漂移中更为稳定,代理在每次轮次中重新发现引用,而不是依赖硬编码路径。
每个主机可以有多少并发工作者?
Scrapeless没有发布固定的每主机并发上限;速率限制在平台级处理。对于多主机管道,每个主机运行独立的代理循环,而不是集中在单个域上 — 确认您的帐户层级的并发限制在 Scrapeless仪表板 中,然后再进行扩展。
我可以在没有AI代理的情况下使用这个吗?
是的。Scrapeless WSS 端点是普通的 CDP——任何 Puppeteer 或 Playwright 脚本都可以通过 puppeteer.connect({ browserWSEndpoint: ... }) 或 chromium.connectOverCDP(...) 连接到相同的云浏览器。当基于聊天的研究或多渠道覆盖很重要时,Hermes 是推荐的路径;CDP 端点是较低级别的备用选项。
我可以将 Hermes 替换为其他代理吗?
可以。任何支持自定义 CDP 端点的代理(Browserbase 风格的集成、浏览器使用、自定义 Playwright/Puppeteer 管道)都可以连接到相同的 WSS 端点。集成的表面是协议,而不是客户端。
我如何在多个代理回合之间保持 cookies 和登录状态?
将 sessionTTL 设置为更长的值(300–900 秒),给会话一个稳定的 sessionName,并在调用之间避免重启连接。云浏览器会在会话的整个生命周期中保持相同的浏览器配置文件、cookies 和滚动位置的活跃状态。
我在哪里可以看到云浏览器实际渲染的内容?
在 WSS URL 后面附加 sessionRecording=true。每次运行都会在 Scrapeless 仪表板上显示为可重放的视频,因此空提取或意外的插屏从头到尾都是可见的,无需对代理进行仪器化。
更多推荐




所有评论(0)