Puppeteer请求拦截:如何判断当前请求来自iframe文档加载?
如何判断Puppeteer请求是否来自iframe的文档加载请求
你之前的方法失效是因为请求拦截阶段,目标URL还未加载到iframe中,无法通过frames().find匹配到对应frame。正确做法是利用Puppeteer Request对象的frame()方法,直接获取发起请求的Frame实例,再判断是否为主框架即可。
可行代码示例
await page.setRequestInterception(true); page.on('request', (req) => { if (req.isInterceptResolutionHandled()) { return; } // 筛选出来自iframe的文档加载请求 if (req.resourceType() === 'document' && req.frame() !== page.mainFrame()) { console.log('检测到来自iframe的文档加载请求'); // 这里添加你的自定义处理逻辑,比如允许/终止请求 } req.continue(); // 必须调用此方法,否则页面请求会停滞 }); await page.goto('https://web-site.com/web-page-containing-iframes');
核心逻辑说明
req.resourceType() === 'document':精准锁定文档类型请求,排除脚本、样式、图片等其他资源的请求干扰。req.frame() !== page.mainFrame():通过对比请求所属Frame与页面主Frame,判断请求是否来自iframe。即便iframe的目标URL尚未加载完成,此时对应的Frame实例已经存在,因此可以准确识别。
如果需要进一步定位具体iframe,还可以调用req.frame().name()获取iframe的name属性,或者req.frame().url()查看其当前关联的URL(可能是初始的about:blank或即将加载的目标地址)。
内容的提问来源于stack exchange,提问作者Albert Hastings
相关产品推荐
相关产品推荐

