You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Playwright中page.route拦截HTTP请求不生效问题求助

解决page.route未触发的问题

以下是排查和解决的具体步骤:

  • 确保路由在页面导航前设置
    必须在调用page.goto()、page.reload()等导航操作之前定义page.route,否则拦截规则不会对已发起的请求生效。正确的代码顺序示例:

    // 先设置路由拦截
    await page.route('**', route => {
         console.log("ROUTES>>>>>>>>>>>>>> ");
         const request = route.request()
         console.log(request.url(), JSON.stringify(request.headers()));
         return route.continue();
    });
    // 再执行页面导航
    await page.goto('https://example.com');
    
  • 验证page对象的有效性
    确认page是通过browser.newPage()成功创建的实例,且未提前调用page.close()。可以在设置路由前打印page对象,检查是否为有效实例。

  • 检查路由匹配规则
    虽然**是通配所有请求,但可以尝试更具体的匹配规则测试(比如'https://example.com/**'),排查是否是通配规则未覆盖目标请求。另外,可通过request.resourceType()确认请求类型,是否属于默认被拦截的范围(默认包含所有资源类型)。

  • 避免与旧版拦截机制冲突
    如果代码中同时使用了page.setRequestInterception(true)这种旧版请求拦截API,会和page.route冲突,导致后者无法触发。请移除旧版拦截逻辑,统一使用page.route。

  • 确认Puppeteer版本兼容性
    page.route是Puppeteer v5.0及以上版本才支持的API,若版本过低会导致方法不存在。通过以下命令查看版本:

    npm list puppeteer
    

    若版本不足,执行升级命令:

    npm install puppeteer@latest
    
  • 排查日志输出问题
    若使用headless模式,确保Node.js控制台未被重定向,可尝试将日志写入文件验证是否实际触发:

    const fs = require('fs');
    await page.route('**', route => {
         const log = `ROUTES>>>>>>>>>>>>>> \n${route.request().url()} ${JSON.stringify(route.request().headers())}\n`;
         fs.appendFileSync('request.log', log);
         return route.continue();
    });
    

内容的提问来源于stack exchange,提问作者simpleMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:25:00