Playwright路由URL模式误匹配:为何命中非目标请求?
路由规则误匹配的原因及解决办法
问题原因
你使用的**/api/common/v1/play?**是Playwright支持的glob匹配模式,这里的?是glob语法的特殊字符——匹配任意单个字符,而非URL中表示查询参数开始的普通问号。所以play?会匹配play后紧跟任意一个字符的路径片段,比如play_random里的play_就满足这个匹配规则,再加上末尾的**匹配后续任意内容,自然就命中了api/common/v1/play_random?这类非目标URL。
解决办法
1. 转义glob中的特殊字符
把?转义为普通字符,让glob只匹配URL中真实的问号:
await page.route("**/api/common/v1/play\\?**", handle_data_route);
2. 使用正则表达式精确匹配
正则能更精准控制匹配逻辑,直接匹配play后紧跟问号的URL:
await page.route(/^.*\/api\/common\/v1\/play\?/, handle_data_route);
3. 在路由处理函数中手动校验
如果不想修改匹配规则,可以在handle_data_route里手动判断请求路径,不符合就跳过处理:
async function handle_data_route(route) { const url = new URL(route.request().url()); if (url.pathname === '/api/common/v1/play') { // 执行你的处理逻辑 } else { await route.continue(); // 不符合则放行请求 } }
内容的提问来源于stack exchange,提问作者kshnkvn
相关产品推荐
相关产品推荐

