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

如何下载blob:https://格式URL的图片?requests与urllib调用失败

解决blob:https://类型URL的图片下载问题

为什么requests/urllib无法下载?

blob:开头的URL并非标准HTTP/HTTPS协议地址,它是浏览器为本地访问内存/磁盘中的二进制数据生成的伪协议链接,仅在生成它的浏览器会话上下文内有效。requests和urllib是HTTP客户端库,只支持HTTP/HTTPS等标准网络协议,自然无法识别处理这类链接,因此会抛出错误。

两种可行的解决方法

方法1:通过浏览器自动化工具(如Selenium)获取

利用浏览器上下文直接提取图片的二进制数据,步骤如下:

  • 启动浏览器加载目标页面
  • 定位到目标图片元素
  • 通过JS脚本将blob图片转换为base64编码,再解码保存

示例代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
import base64

# 初始化浏览器驱动(需提前安装对应浏览器的driver)
driver = webdriver.Chrome()
driver.get("目标页面的完整URL")

# 定位到使用blob URL的图片元素
img = driver.find_element(By.CSS_SELECTOR, "img[src^='blob:https://']")

# 执行JS脚本将图片转为base64
base64_img = driver.execute_script("""
    const canvas = document.createElement('canvas');
    canvas.width = arguments[0].width;
    canvas.height = arguments[0].height;
    canvas.getContext('2d').drawImage(arguments[0], 0, 0);
    return canvas.toDataURL('image/png');
""", img)

# 解码并保存图片
img_data = base64.b64decode(base64_img.split(',')[1])
with open("downloaded_blob_image.png", "wb") as f:
    f.write(img_data)

driver.quit()

方法2:找到blob对应的原始HTTP请求

blob URL通常是浏览器对某个原始HTTP请求返回的二进制数据生成的本地链接,你可以通过浏览器开发者工具找到这个原始请求:

  1. 打开目标页面,按下F12打开开发者工具
  2. 切换到「Network」标签,勾选「Preserve log」
  3. 刷新页面,找到返回图片二进制数据的请求(通常是XHR/Fetch类型,响应类型为image/png或image/jpeg)
  4. 复制该请求的真实URL,直接用requests/urllib请求下载

示例代码:

import requests

# 替换为找到的原始图片请求URL
raw_image_url = "https://example.com/path/to/real/image"
resp = requests.get(raw_image_url)
with open("direct_download_image.png", "wb") as f:
    f.write(resp.content)

注意事项

  • blob URL的有效期与当前浏览器会话绑定,关闭浏览器后链接立即失效
  • 如果blob是从本地文件(如用户上传的文件)生成的,只能通过方法1获取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:09:55