response跳转html页面,puppeteer跳转页面后response获取

puppeteer跳转页面后response获取

问题简述

业务场景 接受到了请求后 前端立马跳转了页面

page.on('response', response => {

if( response.url() === 目标接口)

await response.json()

})

response.json是会报错的

因为页面跳转了. chromedevtools就查不到其响应内容

尝试方案

使用onbeforeunload拦截跳转

缺点: 页面没有正常的跳转

await page.evaluate(() => {

window.onbeforeunload = function(event) {

return "stop navigating";

};

});

await page.on('dialog', (dialog)=>{

dialog.dismiss()

})

原理就是通过onbeforeunload 拦截住页面

然后把弹窗取消掉 然后就页面没跳转就获取到数据了

但有没有方案 可以拿到数据 又可以跳转页面呢

我之前的想法是 还是通过onbeforeunload拦截页面跳转

但是我同意跳转 就是监听到dialog事件后

隔3S后再执行dialog.accept()

这样我们的response.json() 就可以获取到数据

但是实际想 在dialog消失之前....response.json 也获取不到数据...

一定要dialog取消了 response.json 这个promise 才会返回回来

所以这个即获取数据 又成功跳转页面不同

使用 拦截页面跳转的请求

此方案是不通的 还是执行response.json还是会报错

具体代码

await page.setRequestInterception(true)

let navigationNum = 0

let requestListener = async request => {

if (request.isNavigationRequest()){

navigationNum++

}

if (navigationNum >=2 ){ // 第一次为刚进入页面 第二次为跳转到别的页面 进行拦截

await request.abort()

}else{

request.continue()

}

}

page.on('request', requestListener)

这种方案是 response.json 也无法获取 页面跳转也没成功

因为跳转url 发起请求的时候 已经跳走了 所以response.json是没法获取的

而我们拦截了这个请求 所以跳转页面会显示一个chrome的错误页面

© 404mzk all right reserved,powered by Gitbookhttp://blog.404mzk.com 该文件修订时间:

2019-09-24 17:17:03

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值