Skip to main content

抓取后交互

通过 prompt 或运行代码与获取的页面交互。
4 min read

抓取页面以获取干净的数据,然后调用 /interact 在该页面中开始执行 actions:点击按钮、填写表单、提取动态内容,或进一步深入导航。只需描述你想做什么;如果需要完全控制,也可以编写代码。

悬赏:5,000 额度奖励,征集对 /interact 的优质反馈

要获得奖励资格,请与我们的 Firecrawl Feedback Assistant 完成一次高质量访谈 (分享经过思考的具体用例等) 。访谈仅需几分钟,随时可以停止,对人类和代理都很友好 (只需将链接粘贴到您的代理框架中!) 。从未使用过 /interact?您的看法同样有价值。

开始访谈

请填写您的 email,才有资格获得奖励。我们会在每周末审核访谈质量。

选择合适的交互模型#

需求使用权威文档SDK 方法 (Node)
无需先抓取,直接启动独立的浏览器会话浏览器沙箱 / 独立 交互 会话Browser Sandbox, Create Browser Session, Execute Browser Code, List Browser Sessions, Delete Browser Sessionbrowser(), browserExecute(), listBrowsers(), deleteBrowser()
使用 scrapeId 基于抓取结果继续交互抓取后交互Execute Interact, Stop Interactinteract(), stopInteraction()

如果工作流以 POST /v2/scrape 开始,且响应中包含 data.metadata.scrapeId,请使用绑定到抓取的 交互。当你需要具有独立生命周期的独立会话时,请使用 浏览器沙箱。Python SDK 使用对应的 snake_case 方法 (browser()browser_execute()list_browsers()delete_browser()interact()stop_interaction()) 。

AI prompts

描述你希望在页面中执行的操作

代码执行

通过代码安全地与 playwright、agent-browser 交互

实时视图

通过可嵌入的流实时观看或与浏览器交互

工作原理#

  1. 使用 POST /v2/scrape 抓取一个 URL。响应会在 data.metadata.scrapeId 中返回 scrapeId。如果你想持久保存浏览器状态,请在此请求中传入 profile
  2. 调用 POST /v2/scrape/{scrapeId}/interact,并传入 prompt 或 Playwright code 进行交互。此处不要传入 profile;交互会话会继承抓取任务中的 profile
  3. 完成后,使用 DELETE /v2/scrape/{scrapeId}/interact 停止该会话。对于可写的 profile,会话停止时会保存更改。

快速开始#

抓取页面、与其交互,然后停止会话:

Response

通过 prompt 交互#

这是与页面交互的最简单方式。用自然语言描述你的需求,它会自动点击、输入、滚动并提取数据。

响应中包含一个 output 字段,其中包含代理的答案:

Response

保持 prompt 简短且聚焦#

当每个 prompt 都是单一且明确的任务时,效果最好。不要一次性要求代理完成复杂的多步骤工作流,而应将其拆分为单独的交互调用。每次调用都会复用同一个浏览器会话,因此状态会在调用之间延续。

运行代码#

若要实现完全控制,你可以直接在浏览器沙箱中执行代码。page 变量 (一个 Playwright Page 对象) 可在 Node.js 和 Python 中使用。Bash 模式已预装 agent-browser。你还可以在当前会话中截取屏幕截图:在 Node.js 中使用 (await page.screenshot()).toString("base64"),在 Python 中使用 await page.screenshot(path="/tmp/screenshot.png"),或在 Bash 中使用 agent-browser screenshot

Node.js (Playwright)#

默认语言。可直接编写 Playwright 代码。page 已连接到浏览器。

Python#

language 设置为 "python",以使用 Playwright 的 Python API。

Bash (agent-browser)#

agent-browser 是一个预装在沙箱中的 CLI 工具,提供 60 多个命令。它会提供带有元素引用 (@e1@e2 等) 的辅助功能树,非常适合由 LLM 驱动的自动化。

常见的 agent-browser 命令:

命令描述
snapshot带元素引用的完整辅助功能树
snapshot -i仅显示可交互元素
click @e1通过引用点击元素
fill @e1 "text"清空字段并输入文本
type @e1 "text"不清空直接输入
press Enter按下键盘按键
scroll down 500向下滚动 500 像素
get text @e1获取文本内容
get url获取当前 URL
wait @e1等待元素出现
wait --load networkidle等待网络空闲
find text "X" click按文本查找元素并点击
screenshot对当前页面进行截图
eval "js code"在页面中运行 JavaScript

实时视图#

每个交互响应都会返回一个 liveViewUrl,你可以将其嵌入页面中,以实时查看浏览器画面。适用于调试、演示或构建基于浏览器的 UI。

Response

交互式实时视图#

响应还包含一个 interactiveLiveViewUrl。与仅可查看的标准实时视图不同,交互式实时视图允许用户通过嵌入式流直接点击、输入,并与浏览器会话交互。这对于构建面向用户的浏览器 UI 很有帮助,例如登录流程,或需要终端用户控制浏览器的引导式工作流。

CDP URL#

每个交互响应也会返回一个 cdpUrl:即该浏览器会话的原始 Chrome DevTools Protocol (CDP) WebSocket URL。你可以用它从 Playwright、Puppeteer 或任何 CDP 客户端直接连接到实时会话,并通过自己的代码控制浏览器。

会话生命周期#

创建#

首次调用 POST /v2/scrape/{scrapeId}/interact 会延续抓取会话并启动交互。

复用#

对同一个 scrapeId 的后续 interact 调用会复用现有会话。浏览器会保持打开状态,并在调用之间保留其状态,因此你可以将多个交互串联起来:

清理#

完成后请显式停止会话:

会话也会根据 TTL (默认值:10 分钟) 或无活动超时时间 (默认值:5 分钟) 自动过期。

Warning

请务必在使用完毕后停止会话,以避免不必要的计费。额度按秒折算。最低收费为一个浏览器分钟。使用 prompt 的会话按每浏览器分钟 7 额度计费;不使用 prompt 的会话按每浏览器分钟 2 额度计费。详情请参见计费

使用 抓取 + 交互 的持久化配置文件#

默认情况下,每个 scrape + 交互 会话都会从全新的浏览器状态开始。使用 profile,你可以在多次抓取之间保存并复用浏览器状态 (cookies、localStorage、会话) 。这对于保持登录状态和保留偏好设置非常有用。

在初始 POST /v2/scrape 请求中传入 profile 对象。不要在 POST /v2/scrape/{scrapeId}/interact 中传入 profile;交互 会话会复用抓取任务的浏览器会话和 profile 设置。使用 DELETE /v2/scrape/{scrapeId}/interact 停止 交互 会话,以便保存对可写配置文件所做的更改。

cURL

配置文件的生命周期如下:

  1. 使用 profile.namesaveChanges: true 创建抓取。
  2. 针对返回的 scrapeId 运行 prompt 或代码交互。
  3. 停止会话以保存 cookies、localStorage 和其他浏览器状态。
  4. 稍后使用相同的 profile.name 启动新的抓取。当你只想读取现有状态而不将更改写回时,使用 saveChanges: false
参数默认值描述
nameNone持久化配置文件的名称。名称相同的抓取会共享浏览器状态。
saveChangestrue当为 true 时,交互 会话停止后会将浏览器状态保存回该配置文件。设为 false 可在不写入的情况下加载现有数据,这在你需要多个并发读取方时很有用。
Note

同一时间只能有一个会话保存到某个配置文件。如果另一个会话已在保存,你将收到 409 错误。你仍然可以使用 saveChanges: false 打开同一个配置文件,或稍后重试。

浏览器状态会在 交互 会话停止时保存。完成后请务必停止该会话,以便该配置文件可以被复用。

验证持久化#

你可以在一个会话中写入 localStorage 值并停止该会话,然后在第二个使用相同配置文件的会话中读取该值,以此测试持久化,而无需依赖真实的登录流程。

cURL

第二个交互响应应显示 localStorage"saved"cookietrue

Info

通过 API 创建的 Profiles 可能暂时还不会显示在 Dashboard > Interact > Profiles 中。Dashboard 目前尚未提供通过 API 创建的持久化 Profiles 的完整列表。

何时使用什么#

使用场景推荐原因
网页搜索Search专用搜索端点
从 URL 获取干净内容Scrape一次 API 调用,无需会话
在页面上点击、输入、导航交互 (prompt)只需用英文描述即可
提取交互后的数据交互 (prompt)无需选择器
复杂的抓取逻辑交互 (code)完整的 Playwright 控制能力
Info

交互 与 浏览器沙箱:交互构建在与 浏览器沙箱 相同的基础设施之上,但针对最常见的使用模式提供了更好的界面:先抓取页面,再进一步深入。当你需要一个不绑定到特定抓取任务的独立浏览器会话时,浏览器沙箱更合适。

定价#

  • 仅代码 (无 prompt): 每个会话分钟 2 个额度
  • 使用 AI prompts: 每个会话分钟 7 个额度
  • 抓取: 单独计费 (每次抓取 1 个额度,外加任何特定格式的费用) 。

API 参考#

请求体 (POST)#

字段类型默认值描述
promptstringNone提供给 AI 代理的自然语言任务。若未设置 code,则此项必填。最多 10,000 个字符。
codestringNone要执行的代码 (Node.js、Python 或 Bash) 。若未设置 prompt,则此项必填。最多 100,000 个字符。
languagestring"node""node""python""bash"。仅在使用 code 时生效。
timeoutnumber30超时时间,单位为秒 (1–300) 。
originstringNone用于活动追踪的调用方标识符。

响应#

字段描述
success如果执行已完成且未出现错误,则为 true
cdpUrl浏览器会话的原始 Chrome DevTools Protocol (CDP) WebSocket URL。可直接使用 Playwright、Puppeteer 或任何 CDP 客户端进行连接
liveViewUrl浏览器会话的只读实时视图 URL
interactiveLiveViewUrl交互式实时视图 URL (查看者可控制浏览器)
output代理对你的 prompt 给出的自然语言回答。仅在使用 prompt 时返回。
stdout代码执行的标准输出
result沙箱的原始返回值。对于 code:最后一个求值的表达式。对于 prompt:代理用于生成 output 的原始页面快照。
stderr标准错误输出
exitCode退出码 (0 = 成功)
killed如果执行因超时而终止,则为 true

有反馈或需要帮助?请发送邮件至 help@firecrawl.com,或通过 Discord 联系我们。