通过 blob 下载图像:https

问题描述 投票:0回答:1

我正在尝试下载位于 blob:https:// 等网址的图像,但是使用 requests 和 urllib 不起作用。他们在发出请求时都会崩溃。 urllib 给出错误代码“”,而 requests 给出“未找到“blob”的连接适配器”。

python python-3.x python-requests urllib
1个回答
0
投票

您似乎正在尝试从以“blob:https://”开头的 URL 下载图像。这种类型的 URL 引用 Blob 对象,该对象通常用于在浏览器中生成或操作的数据。这些 URL 无法通过标准 HTTP 请求直接访问,这就是

requests
urllib
都失败的原因。

事情是这样的:

  1. Blob URL 是临时的、特定于浏览器的数据引用。
  2. 无法从创建它们的浏览器上下文外部访问它们。
  3. “blob:”协议不是标准 HTTP 协议,这就是您的 HTTP 库失败的原因。

要下载这些图像,您需要采用不同的方法。这里有几个选项:

  1. 如果您使用的是 Selenium 等浏览器自动化工具: 您可以使用 JavaScript 将 blob 转换为数据 URL 或直接下载。

  2. 如果图像是从网络应用程序生成的: 尝试找到图像的原始来源。可能有 API 或不同的 URL 提供对图像文件的直接访问。

  3. 如果您正在开发浏览器扩展: 您可以使用浏览器的 API 直接访问 blob URL。

  4. 如果您正在使用特定的 Web 应用程序: 调查是否有可用的 API 允许您直接下载图像。

以下是如何使用 Selenium 下载 blob URL 的示例:

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

driver = webdriver.Chrome()  # Or whichever browser you're using
driver.get("https://example.com")  # The page containing the image

# Find the image element
img_element = driver.find_element(By.CSS_SELECTOR, "img#your-image-id")
img_url = img_element.get_attribute('src')

# Execute JavaScript to fetch the image as a Base64 string
img_base64 = driver.execute_script("""
    var xhr = new XMLHttpRequest();
    xhr.open('GET', arguments[0], false);
    xhr.responseType = 'blob';
    xhr.send(null);
    var reader = new FileReader();
    reader.readAsDataURL(xhr.response);
    return reader.result;
    """, img_url)

# Remove the "data:image/png;base64," part
img_base64 = img_base64.split(',')[1]

# Decode and save the image
with open("image.png", "wb") as f:
    f.write(base64.b64decode(img_base64))

driver.quit()

此脚本使用 Selenium 来:

  1. 导航至页面
  2. 找到图像元素
  3. 获取其 blob URL
  4. 使用 JavaScript 获取图像数据并将其转换为 Base64 字符串
  5. 解码Base64字符串并将其保存为图像文件

请记住,具体实施可能会有所不同,具体取决于您的具体用例和您正在使用的网站。请始终确保您有权下载和使用图像,并遵守网站的服务条款和 robots.txt 文件。

© www.soinside.com 2019 - 2024. All rights reserved.