使用Puppeteer捕获网络请求时,JS文件标记为xhr类型的疑问
关于Puppeteer中JS文件URL但resourceType为xhr的请求解析
嘿,这个问题我之前排查类似场景时刚好弄明白,给你拆解清楚:
这种请求绝对是由其他脚本发起的针对该JS文件的HTTP请求,而非这个JS文件自身发起的请求,原因如下:
- 先明确Puppeteer里
resourceType的判定逻辑:xhr类型对应的是通过XMLHttpRequest或fetch API发起的请求,不管请求的目标资源是什么类型(JS、JSON、图片都有可能)。 - 如果是某个JS文件自身发起请求,指的是这个JS文件被浏览器以常规脚本方式加载(比如
<script>标签引入)并执行后,里面的代码发起了新请求——此时那个新请求的resourceType可能是xhr,但这个JS文件本身的加载请求,resourceType应该是script才对。 - 而你遇到的情况是,请求的URL指向JS文件,但resourceType是xhr,说明是页面中已经加载完成的某个脚本(比如其他内嵌JS或已加载的外部脚本),通过xhr/fetch主动去获取这个JS文件的内容,而非浏览器自动加载脚本的行为。
举个简单例子:假设页面里有一段脚本执行了fetch('/utils/helper.js'),这个请求在Puppeteer捕获时,URL是JS文件,但resourceType就是xhr,发起者就是执行这段fetch代码的那个脚本。
如果想进一步确认发起者,你可以在Puppeteer的请求监听里获取request.initiator(),它会返回发起请求的源信息,比如:
page.on('request', (request) => { if (request.resourceType() === 'xhr' && request.url().endsWith('.js')) { const initiator = request.initiator(); console.log(`发起者类型: ${initiator.type}, 发起者URL: ${initiator.url}`); } });
内容的提问来源于stack exchange,提问作者Max Baldwin
相关产品推荐
相关产品推荐

