跳转到内容

监听网页请求

监听网页请求 用于在一段操作期间监听页面发出的网络请求,按资源类型和网址规则捕获请求与响应信息。它是一个「块」指令:把会触发请求的操作放进它的子节点里执行,块执行完成后监听会自动停止。

指令标识:WebRequestListener
指令类型:网页指令
指令描述:启动网络请求监听器,按过滤规则捕获请求信息,块执行完自动停止

工作流支持「可视化编排」和「代码编排」两种创建方式。监听网页请求 在两种方式里都能用,核心业务参数一致,区别主要是你通过界面配置,还是通过 Python 脚本配置。

方式怎么用适合人群
可视化编排(推荐先学)拖入「监听网页请求」块节点,在块内放入触发请求的操作大多数用户,零代码,适合快速搭建和调试
代码编排(Python)在脚本中调用 bots.webRequestListener(...) 配置监听熟悉代码、需要复用脚本或批量生成流程的用户

第一次使用建议先用可视化编排跑通,再迁移到 Python 代码编排。下方「参数说明」同时给出界面字段和代码参数名,方便两种方式对应。

  • 需要抓取页面在某个操作时发出的接口请求和返回数据。
  • 想在点击、搜索、翻页时,捕获背后的 XHR / Fetch 接口响应。
  • 需要把接口返回的数据提取出来供后续节点使用。

监听到的数据要通过 获取网页监听结果 在块内提取并保存到变量。

  • 当前已经有打开的页面。
  • 已经确认要捕获的资源类型(如 xhrfetch)和网址过滤规则。
  • 把会触发目标请求的操作(点击、翻页等)放进监听块内部。
  • 提取结果的「获取网页监听结果」节点也要放在块内,因为监听只在块执行期间生效。
监听网页请求

下面用一个常见场景演示:点击查询按钮,捕获背后的接口响应

  1. 确认页面已经打开并加载完成。
  2. 添加 监听网页请求 块节点,设置要捕获的资源类型(如 xhr,fetch)和网址规则。
  3. 在块内放入 点击元素,点击查询按钮触发接口请求。
  4. 在块内再放入 获取网页监听结果,按目标接口路径提取并保存到变量。
  5. 运行后查看变量是否得到对应接口的响应数据。
界面名称代码属性名类型必填默认值说明
筛选资源类型resourceTypesList<Enum>XHR要捕获的网络请求文件类型,多个用逗号分隔,默认 XHR。可选值:XHRFETCHJSCSSDOCUMENT(文档)、IMAGE(图片)、FONT(字体)、MEDIA(媒体)、TEXT_TRACKEVENT_SOURCEWEB_SOCKETMANIFESTOTHER(其他)、ALL(全部)。推荐用 XHRFETCH 捕获接口数据。
资源路径UrlresourceUrlsList<String>[]按网址过滤要捕获的请求,支持多个(逗号分隔),留空([])表示捕获全部请求。eg:/api/order/*
根据通配符匹配isPatternBooleanfalsetrue 时对网址规则启用通配符(*)或正则表达式匹配;为 false 时按包含匹配。

监听本身不直接输出变量,捕获到的数据由块内的 获取网页监听结果 节点提取并保存。捕获内容包含请求的类型、网址、方法、请求头、请求体,以及响应状态、响应头和响应体(文本类资源会捕获响应体,二进制资源不捕获响应体)。

说明:为避免占用过多内存,监听对捕获数据总量有上限,超过后新请求不再缓存。

  • 监听网页请求 节点运行结束后状态为成功。
  • 运行日志中没有参数缺失、超时或执行失败等错误。
  • 后续节点能够继续执行,流程没有因为该节点异常中断。
现象 / 报错原文可能原因处理建议
没有捕获到任何请求触发请求的操作没放进块内,或过滤规则太严把点击、翻页等操作放进监听块内部;放宽资源类型和网址规则
捕获到请求但没有响应体资源是二进制类型,或响应体读取失败xhrfetchdocument 等文本类资源会捕获响应体
提取结果报「listener is not active」「获取网页监听结果」放到了块外面把提取结果节点放回监听块内部

代码编排以 Python 为主。运行上下文由代码编排模板创建,示例里只需要关注业务指令本身。

监听是一个「块」结构:触发请求的操作和提取结果要在监听生效期间执行。可视化编排里通过把它们放进监听块内部来实现,代码编排里同样需要按这个先后顺序组织:

# 配置监听:捕获 xhr / fetch,按网址包含匹配
bots.webRequestListener(
resourceTypes="xhr,fetch",
resourceUrls="/api/order/query",
)
# 触发请求的操作(块内)
bots.clickElementMixed(selector="//button[text()='查询']")
# 提取监听结果(块内)
result = bots.getWebListenerResult(
resourceUrl="/api/order/query",
outKey="orderApi",
)
print(result)

如果你想在工作流中通过节点动态编排指令,可使用 执行指令(XML)节点。

A: 监听块内的所有子节点执行完成后,监听会自动停止并清理。不需要手动关闭。

Q2:为什么一定要把操作放进块内?

Section titled “Q2:为什么一定要把操作放进块内?”

A: 监听只在块执行期间生效。触发请求的操作如果在块外执行,监听已经停止,自然捕获不到。

A: 默认按「包含」匹配;把「是否使用通配/正则」设为 true 后按模式匹配,可使用 *? 等通配符。