Python Playwright:如何阻止内联SVG加载?已拦截外部资源
拦截内联SVG的解决方案
你当前用page.route拦截的是外部资源请求,而内联SVG是HTML文档的一部分,并非独立的网络请求,所以这个方法对它无效。要处理内联SVG,需要通过DOM操作来移除或阻止其渲染,以下是几种可行方案:
方案1:页面加载后批量移除内联SVG
在页面加载完成后,直接通过page.evaluate执行DOM操作,移除所有<svg>元素:
page.route(re.compile(r"\.(jpg|png|svg)$"), lambda route: route.abort()) page.goto(url) # 移除页面中所有内联SVG page.evaluate("""() => { document.querySelectorAll('svg').forEach(svg => svg.remove()); }""")
方案2:注入初始化脚本,实时拦截SVG元素
如果页面存在动态加载SVG的场景(比如通过JS动态插入),可以用MutationObserver监听DOM变化,实时移除新增的SVG元素:
page.route(re.compile(r"\.(jpg|png|svg)$"), lambda route: route.abort()) # 注入初始化脚本,在页面初始化时启动监听 page.addInitScript("""() => { const observer = new MutationObserver((mutations) => { mutations.forEach(mutation => { mutation.addedNodes.forEach(node => { // 直接移除新增的SVG节点 if (node.tagName === 'SVG') { node.remove(); } // 移除节点内部嵌套的SVG else if (node.querySelectorAll) { node.querySelectorAll('svg').forEach(svg => svg.remove()); } }); }); }); // 监听整个body的DOM变化 observer.observe(document.body, { childList: true, subtree: true }); }""") page.goto(url)
方案3:隐藏SVG而非移除(可选)
如果不想完全移除SVG,只是让它不可见,可以修改元素样式:
page.evaluate("""() => { document.querySelectorAll('svg').forEach(svg => { svg.style.display = 'none'; }); }""")
内容的提问来源于stack exchange,提问作者MortenB
相关产品推荐
相关产品推荐

