为什么pyppeteer开启请求拦截后页面加载超时无法正常工作?
pyppeteer请求拦截超时问题原因及解决方案
问题根因
该问题由pyppeteer异步事件回调的调度逻辑缺陷,与pyppeteer_stealth的注入逻辑共同触发:
- pyppeteer的
request事件监听原生支持异步回调函数,手动通过lambda嵌套asyncio.ensure_future注册回调时,会导致协程任务脱离pyppeteer内部的调度管控,部分请求的request.continue_()放行操作出现调度延迟甚至漏执行,请求一直处于 pending 状态,最终触发页面导航超时。 pyppeteer_stealth注入的防检测逻辑会触发额外的内部资源请求,这类请求的拦截处理如果没有及时响应,也会阻塞页面导航完成的判定逻辑。
解决方案
方案1:修正回调注册方式
删除回调注册时的lambda和asyncio.ensure_future封装,直接传入异步处理函数即可,pyppeteer底层已完成异步回调的适配:
await page.setRequestInterception(value=True) # 直接传入异步函数,无需额外封装 page.on(event='request', f=intercept_network_request)
方案2:版本兼容检查
- 确保使用的pyppeteer版本≥0.2.5,pyppeteer-stealth版本≥2.7.4,旧版本pyppeteer存在请求拦截回调的已知bug,会偶发请求pending问题。
- 若版本符合要求仍出现异常,可在放行请求时显式指定参数:
await request.continue_(ignoreCache=False)
方案3:规避stealth冲突
如果确认是pyppeteer_stealth与请求拦截逻辑冲突,可在初始化时关闭部分和网络请求相关的注入项:
await stealth(page=page, run_on_insecure_origins=False)
内容的提问来源于stack exchange,提问作者nosheyakku
相关产品推荐
相关产品推荐

