You need to enable JavaScript to run this app. Python Selenium爬虫如何自动下载网页内嵌无src的SVG?
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium爬虫如何自动下载网页内嵌无src的SVG?

内嵌动态SVG自动化下载实现方案

核心逻辑

内嵌在DOM中的动态SVG没有独立外链,本质是直接嵌入页面文档树的<svg>节点,不需要通过requests发请求拉取资源,直接从浏览器渲染完成的DOM中提取完整节点源码,就能得到可独立打开、保留全部动态效果的标准SVG文件。

适配思路

在你原有悬停触发、APNG资源下载的逻辑基础上新增资源类型判断分支,完全不改动原有APNG的处理流程:

  • 悬停触发对应元素后,同时等待两类媒体元素(带src的img标签、内嵌svg标签)任意一种加载完成
  • 检测当前显示的元素是否为带有效src的img标签:如果是,走原有APNG下载流程
  • 如果检测到当前显示的是内嵌svg节点,直接通过Selenium执行JS提取该节点的完整HTML源码,写入.svg格式文件即可

适配后的代码片段

# 保留原有悬停触发逻辑
ActionChains(driver).move_to_element(item).perform()

# 等待任意目标媒体元素加载完成
wait.until(
    lambda d: d.find_elements(By.ID, "img") or d.find_elements(By.TAG_NAME, "svg")
)

# 原有APNG资源处理逻辑
img_nodes = driver.find_elements(By.ID, "img")
if img_nodes and img_nodes[0].is_displayed():
    img_src = img_nodes[0].get_attribute("src")
    img_request = requests.get(img_src)
    if img_request.ok:
        with open(f"{item.text}.apng.png", "wb") as imgfile:
            print(f"Downloading {item.text}")
            imgfile.write(img_request.content)
    else:
        print("Request failed.")
        input("Press any key to exit")
        exit()
# 新增的内嵌动态SVG处理逻辑
else:
    # 定位当前可见的SVG节点
    visible_svg = wait.until(ec.visibility_of_element_located((By.TAG_NAME, "svg")))
    # 提取完整SVG序列化内容,自动保留所有内嵌动画、图形属性
    svg_full_content = driver.execute_script("return arguments[0].outerHTML;", visible_svg)
    # 以UTF-8编码写入.svg文件,可直接被浏览器、图片查看器打开
    with open(f"{item.text}.svg", "w", encoding="utf-8") as svgfile:
        print(f"Downloading {item.text}")
        svgfile.write(svg_full_content)

实际适配效果

  • 提取的SVG源码自带完整的命名空间属性,以及<animate>、<animateTransform>等动态标签的全部配置,和页面悬停时看到的动态效果完全一致,不会出现动画丢失、图形变形的问题
  • 整个流程全程无人工介入,完全适配批量下载的自动化需求,不需要依赖svg-grabber这类手动操作的浏览器插件
  • 针对目标站点的页面结构,悬停后加载的SVG节点无外部资源依赖,提取的内容可以独立运行,不会出现资源路径失效的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 19:06:04