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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:26:14