1. 阻止网络请求的场景与目标
在自动化测试、性能分析以及离线体验验证等场景中,阻止所有网络请求可以帮助你创建稳定、可重复的测试环境,避免外部依赖波动影响结果。
通过统一的拦截逻辑,可以实现对页面资源的完全控制,实现测试环境的隔离与可控性,从而提高测试的确定性与可重复性。
应用场景解析
当需要验证页面在没有外部数据的情况下的渲染与交互能力时,全部请求被拦截,能快速切换到离线模式或本地资源替代品,确保呈现行为 remains 可预测。
在性能 profiling 场景中,禁用网络请求可以消除网络带宽波动的影响,让你聚焦于客户端渲染、脚本执行和动画帧率等指标。
实现目标与边界
需要注意,完全阻断资源加载可能影响初始渲染,因此在实际应用中要结合场景选择拦截粒度,避免误判页面状态。
在 Playwright 中,这类拦截通常通过 路由拦截(page.route)和 route.abort() 的组合来实现,确保对每个请求的控制都在可预期之内。

2. Playwright 的核心:路由拦截机制
Playwright 的路由拦截机制允许对页面发出的每个请求进行拦截、修改或阻塞,核心 API 是 page.route 与 route.abort()。通过统一的拦截逻辑,可以实现对所有资源的精准控制。
通常会使用通配符 URL,例如 “**”,将策略应用到所有请求上,确保在不同页面、不同域名下都能获得一致的拦截效果。
路由拦截工作原理
当页面向服务器发起请求时,Playwright 会触发路由处理逻辑,开发者可以在回调中直接决定是继续、修改还是中止请求,这对于实现“全局阻止”特别有力。
通过结合页面和上下文的 路由设置,你可以实现一次性应用到多个页面、多个路由的拦截策略,从而实现复杂的离线或隐私保护场景。
拦截策略的核心 API
route.abort() 会立即中止请求,route.fulfill() 可以返回自定义响应以模拟服务端结果,route.continue() 允许请求继续并可对参数进行修改。
在实际使用中,通常会先用 page.route("**", route => { ... }) 注册拦截,在回调中根据请求信息决定采取的动作,从而实现对所有资源的统一控制。
3. 实战演练:完整示例代码
下面给出完整的实战案例,演示如何在不同语言环境中实现“阻止所有网络请求”的效果,帮助你快速落地并在实际测试中复现。
通过这套示例,你可以看到,简单的拦截配置就能实现全局网络阻断,同时也提供了后续扩展的空间,例如后续替换成本地文件、模拟错误响应等场景。
JavaScript/TypeScript 实现
以下示例展示如何在 页面级别拦截并阻止所有网络请求;使用 route 配合通配符 “**”。
// JavaScript/TypeScript 示例
const { chromium } = require('playwright');(async () => {const browser = await chromium.launch({ headless: true });const context = await browser.newContext();const page = await context.newPage();// 拦截所有网络请求并拒绝await page.route('**', (route) => {route.abort();});try {await page.goto('https://example.com');} catch (e) {console.error('访问被阻止:', e);}await browser.close();
})();
在这个示例中,所有请求都会被阻塞,从而实现离线策略或隐私保护场景的控制。
如果你需要在特定情况恢复部分资源,可以将回调逻辑扩展为条件判断,例如根据域名、资源类型或请求头来决定是否阻断某些资源。
Python 实现
下面的 Python 实现使用同步 API,展示如何在 Playwright for Python 中应用相同的拦截逻辑。
# Python 示例
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch()context = browser.new_context()page = context.new_page()# 拦截并阻止所有请求page.route("**", lambda route, request: route.abort())page.goto("https://example.com")browser.close()
该实现确保页面加载时没有外部资源发送,便于进行离线渲染、内容过滤或带宽受限测试。


