Browser4
Browser4 copied to clipboard
Improved CDP resource type checking in ChromeNavigateEntry
Relative Code:
private fun isMajorRequestWillBeSent(event: RequestWillBeSent): Boolean {
return !navigateEntry.documentTransferred && event.type == ResourceType.DOCUMENT
}
private fun isMajorResponseReceived(event: ResponseReceived): Boolean {
return !navigateEntry.documentTransferred && event.type == ResourceType.DOCUMENT
}
private fun isMinorResource(type: ResourceType): Boolean {
return type in listOf(
ResourceType.FONT,
ResourceType.MEDIA,
ResourceType.IMAGE,
)
}
Improvement:
https://chatgpt.com/s/t_68fcbdcd8c64819180900928074c6ee7
在使用 Chrome DevTools Protocol (CDP) 监听网页网络活动时,要区分「主文档请求(main document)」与「资源请求(resource)」确实很常见,尤其是在编写自动化测试、分析性能或安全检查脚本时。
🧭 一、核心概念
CDP 的网络层事件主要来自 Network domain ,最常用的是:
- Network.requestWillBeSent
- Network.responseReceived
- Network.loadingFinished
当浏览器加载一个页面时:
第一个请求(主文档)通常是 HTML,对应的 type=Document。
后续的图片、CSS、JS、XHR、字体等资源,也都会触发各自的事件,但类型会不同,例如 Script、Stylesheet、Image、XHR。
✅ 二、判断方式(推荐)
判断“主文档请求”与“资源请求”的最可靠方法是结合以下两个字段:
字段 | 来源 | 说明
-- | -- | --
request.frameId | Network.requestWillBeSent | 属于哪个 frame 的请求(主文档为 main frame)
type | Network.responseReceived | DevTools 协议内部判定的资源类型,例如 Document、Image、Script 等