Guide

当你的AI智能体无法访问受保护网站时,如何自动化网页交互?

AI

AI Agent Skills

2 min

问题:你的AI智能体在网络上碰壁了

你构建了一个需要从网站收集数据、填写表单或与网络应用程序交互的AI智能体。它在简单的公开页面上运行良好。但当你将它指向一个有登录墙、验证码或重度JavaScript渲染的网站时,它就失败了。智能体要么被阻止,无法解析动态内容,要么陷入尝试失败的无限循环。

这是一个常见的挫折。许多网页自动化任务不仅仅是发送HTTP请求那么简单。现代网站使用复杂的JavaScript框架、反机器人检测系统和交互式元素,传统的抓取工具无法处理。你的智能体需要表现得像真实用户一样——点击按钮、填写表单、导航菜单并等待内容加载。

为什么会发生这种情况?

有几个因素导致了这个问题:

  • 机器人检测: 网站使用Cloudflare、Akamai或自定义解决方案来识别和阻止自动化流量。它们寻找无头浏览器指纹、快速请求或缺少类人交互等模式。
  • 验证码: reCAPTCHA、hCaptcha和类似系统旨在阻止机器人。以编程方式解决它们通常复杂且不可靠。
  • 动态内容: 使用React、Vue或Angular构建的单页应用程序(SPA)异步加载内容。简单的HTTP请求无法看到最终渲染的页面。
  • 身份验证和会话: 许多任务需要登录并维护带有cookie的会话。跨多个请求管理这种状态很棘手。
  • IP速率限制和地理封锁: 一些网站根据IP地址或地理位置限制访问。

一个好的解决方案应该带来什么改变

对于AI智能体构建者来说,一个实用的解决方案应该:

  1. 处理动态内容: 渲染JavaScript并与完全加载的页面交互,而不仅仅是初始HTML。
  2. 绕过基本的机器人检测: 使用技术来显得更像人类用户,例如正确的用户代理字符串、真实的交互时间和住宅IP地址。
  3. 管理验证码: 理想情况下,自动解决常见验证码,或提供可靠的方法来处理它们。
  4. 支持复杂交互: 允许点击特定元素、填写表单、选择下拉菜单、上传文件以及导航多步骤流程。
  5. 提供结构化输出: 以结构化格式(如可访问性树)返回页面内容,使AI智能体可以轻松解析和推理,而不仅仅是原始HTML或截图。
  6. 提供环境灵活性: 让你选择用于开发的快速本地浏览器和用于生产任务的具有反检测功能的强大远程浏览器。

如果你当前的工作流程涉及为每个网站编写自定义的Puppeteer或Playwright脚本,不断调试选择器更改,并在受保护的页面上失败,那么你在基础设施上花费了太多时间,而不是智能体的核心逻辑。

介绍浏览器技能:一个可供检查的实用选项

解决这一系列问题的一个可能方案是AI Agent Skills目录上提供的浏览器技能。它不是万能药,但这是一个特定的工具,旨在让AI智能体使用自然语言命令通过CLI自动化网页交互。

核心思想是为浏览器自动化提供一个标准化的接口,供AI智能体使用。智能体(或你代表智能体)发出诸如browse open <url>browse snapshotbrowse click <ref>之类的命令,而不是编写代码。该技能处理底层的浏览器管理。

你可以在浏览器技能落地页上找到完整的详细信息和设置说明。

它如何解决核心问题

让我们看看这个技能如何对应前面概述的问题:

  • 动态内容: 它使用真实的浏览器(Chrome/Chromium)来渲染页面,因此JavaScript密集型网站可以按预期工作。
  • 机器人检测和验证码: 该技能支持两种模式:本地远程(Browserbase)。远程模式是访问受保护网站的关键。它提供的功能包括:
    • Browserbase身份和验证浏览器: 使用更难被检测为自动化的浏览器指纹。
    • 自动验证码解决: 声称可以自动处理reCAPTCHA和hCaptcha。
    • 住宅代理: 通过许多国家的真实住宅IP路由流量,有助于地理封锁并减少基于IP的封锁。
  • 复杂交互: CLI提供了一组丰富的命令,用于点击、输入、填写表单、选择选项、上传文件,甚至鼠标拖动。
  • 结构化输出: browse snapshot命令特别有用。它返回一个带有元素引用(如@0-5)的可访问性树。这是页面的结构化、基于文本的表示,比截图或原始DOM更容易让AI理解和操作。
  • 环境灵活性: 你可以为每个命令明确选择模式:
    • --local:用于干净、隔离的会话。适合开发和受信任的网站。
    • --auto-connect:连接到你现有的本地Chrome,重用你的cookie和登录信息。
    • --remote:使用Browserbase的反检测功能。这是用于受保护网站的模式。

使用该技能的典型工作流程

下面是一个具体示例,说明你如何使用它登录网站并抓取一些数据:

  1. 启动会话: 决定是需要本地还是远程。对于有Cloudflare的网站,你需要使用远程模式。
    browse open https://protected-site.com --remote
    
  2. 理解页面: 获取结构化视图。
    browse snapshot
    
    这将返回一个带有引用的元素树。你可能会看到类似这样的内容:
    [ref=@0-1] button "登录"
    [ref=@0-2] input "用户名"
    [ref=@0-3] input "密码"
    
  3. 使用引用进行交互:
    browse fill @0-2 "myuser"
    browse fill @0-3 "mypassword"
    browse click @0-1
    
  4. 验证并继续: 再次获取快照以查看是否已登录,然后导航到数据页面并提取数据。
    browse snapshot
    browse get markdown
    
  5. 清理:
    browse stop
    

这个工作流程是命令驱动的,可以集成到AI智能体的动作空间中。智能体可以被编程为使用browse snapshot来“查看”页面,决定一个动作(比如点击按钮),并执行相应的CLI命令。

评估该技能是否适合你的工作流程

在考虑集成此技能之前,评估其适用性至关重要。它并非适用于所有用例。

最佳使用场景

n* 抓取受保护的网站: 如果你的主要目标是从具有反机器人措施的网站提取数据,那么远程模式的功能(代理、验证码解决、验证浏览器)是主要吸引力。

  • 自动化多步骤网络表单: 填写申请、预订系统或需要顺序交互的复杂注册流程等任务。
  • 截图或生成PDF: browse screenshot命令可以捕获视觉证据或状态。
  • 与JavaScript密集型SPA交互: 任何你需要的内容在初始页面加载后动态加载的网站。
  • 测试Web应用程序: 通过模拟用户旅程执行端到端测试。

何时不使用它

  • 简单的静态页面抓取: 如果网站是一个没有JavaScript或机器人保护的简单HTML页面,轻量级的HTTP客户端(如Python中的requests)更快、更高效。
  • 高容量、高速抓取: 虽然远程模式有帮助,但此技能旨在用于交互式自动化,而不是极快的批量数据提取。完整浏览器会话的开销可能太高。
  • 当你需要深度、自定义的浏览器控制时: 如果你需要对浏览器进行非常具体的低级控制(例如在网络请求拦截或直接操作DOM方面),编写自己的Playwright/Puppeteer脚本可能更合适。
  • 如果你无法安装CLI: 该技能需要browse CLI(npm install -g browse)。如果你的环境不允许全局npm包,这是一个障碍。

设置上下文和安全信号

设置要求:

  • Node.js和npm: 安装CLI所必需。
  • Chrome/Chromium: 对于本地模式,机器上必须安装Chrome或Chromium浏览器。
  • Browserbase API密钥: 对于远程模式,你需要从Browserbase获取API密钥。这是一项付费服务,尽管他们可能提供免费套餐。

安全考虑:

  • 凭据处理: 技能本身不存储你的密码。当你使用browse fill输入凭据时,它们会通过浏览器直接发送到目标网站。但是,请注意你运行命令的位置以及谁可以访问终端历史记录。
  • 远程模式数据: 使用--remote时,你的浏览活动(URL、页面内容)由Browserbase的服务器处理。如果你处理敏感数据,请查看他们的隐私政策。
  • 许可证: 技能的存储库在元数据中将许可证列为“未知”,但SKILL.md摘录提到MIT。请务必检查官方存储库以获取最新的许可证信息。
  • 安全级别: 目录将其列为“低”安全级别。这可能指的是它执行任意浏览器命令的事实。你应该只在你信任的网站上使用它,并理解自动交互的含义。

存储库信号

该技能来自GitHub上的browserbase/skills存储库。

  • 星标(3646)和复刻(231): 这表明社区有一定的兴趣和采用度,表明这是一个维护中的项目。
  • 积极开发: 检查存储库的提交历史和问题跟踪器,以了解其开发的活跃程度以及错误是否正在被解决。
  • 文档: 提供的SKILL.md摘录相当详细,这是一个好兆头。完整的存储库应该有全面的文档。

做出你的决定

要决定浏览器技能是否适合你,请问自己这些问题:

  1. 我的主要瓶颈是什么? 是处理验证码、JavaScript渲染还是机器人检测?如果是,远程模式的功能很有吸引力。
  2. 我的交互模式是什么? 我需要点击按钮、填写表单和导航菜单吗?如果是,CLI命令集很好地涵盖了这些。
  3. 我的AI智能体将如何“看到”页面? 如果你需要一个结构化的、可解析的视图(可访问性树)而不仅仅是截图,那么browse snapshot是一个强大的功能。
  4. 我能管理设置吗? 我是否愿意安装全局npm包,并可能管理Browserbase API密钥和计费?
  5. 我的规模是什么? 我是在自动化一些复杂的交互,还是试图抓取数百万个页面?该技能更适合前者。

如果你的答案与该技能的优势一致,那么值得进一步检查。克隆存储库,阅读完整的文档,并在测试站点上手动尝试CLI命令。看看snapshot输出对于你的目标页面是什么样子。首先测试本地模式,然后评估你是否需要远程模式的功能来满足你的特定用例。

请记住,它是众多工具中的一种。对于某些任务,简单的HTTP库更好。对于其他任务,可能需要自定义的Playwright脚本。但对于需要以结构化方式与现代、受保护的网络交互的AI智能体来说,浏览器技能提供了一种专注的、命令驱动的方法,值得研究。

延伸阅读