Python3 selenium保存网页base64编码图片

本文介绍如何使用Python的Selenium库抓取网页上Base64编码的图片,并将其解码保存为本地文件。具体步骤包括初始化WebDriver,最大化浏览器窗口,加载目标URL,定位图片元素并获取其src属性,处理Base64字符串,解码并保存图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python3 selenium保存网页base64编码图片:

from selenium import webdriver
from base64 import b64decode
import time

url = "url"
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(url)
time.sleep(0.5)
img_str = driver.find_element_by_class_name(
    'base64image').get_attribute('src') # 定位图片位置,获取 src 的属性值
img_str = img_str.split(",")[-1] # 删除前面的 “data:image/jpeg;base64,”
img_str = img_str.replace("%0A", '\n')  # 将"%0A"替换为换行符
img_data = b64decode(img_str)  # b64decode 解码
with open('./captcha.jpeg', 'wb') as fout:
    fout.write(img_data)
    fout.close()
time.sleep(2)
driver.close()

注意: get_attribute(‘src’) 会把换行符替换为"%0A",因此解码的时候要替换回去。

### 如何解决保存 JPG 截图的问题 在 Selenium 中,默认情况下 `get_screenshot_as_file()` 方法仅支持 `.png` 格式的截图[^1]。如果尝试将其更改为其他格式(如 `.jpg`),会抛出错误。然而,可以通过一些额外处理将 PNG 图像转换为 JPEG 格式。 以下是实现方法: #### 使用 PIL 库进行格式转换 可以利用 Python 的 Pillow 库(PIL 是其前身)加载由 Selenium 生成的 PNG 文件并将其另存为 JPEG 格式。具体代码如下所示: ```python from selenium import webdriver from PIL import Image import io # 初始化 WebDriver driver = webdriver.Firefox() driver.get('https://apress.com') # 获取屏幕截图作为二进制数据 screenshot_binary = driver.get_screenshot_as_png() # 将二进制数据加载到内存中的图像对象 image_stream = io.BytesIO(screenshot_binary) img = Image.open(image_stream) # 转换为 RGB 模式(JPEG 不支持透明度) if img.mode != 'RGB': img = img.convert('RGB') # 另存为 JPEG 文件 img.save('screenshot2.jpg', 'JPEG') ``` 上述代码通过调用 `get_screenshot_as_png()` 方法获取原始 PNG 数据流,并使用 Pillow 进行模式转换和重新保存操作[^3]。 --- #### 对于单个元素的截图 当需要捕获特定 HTML 元素而非整个页面时,可结合 JavaScript 和 Selenium 实现裁剪功能。以下是一个完整的解决方案: ```python from selenium import webdriver from PIL import Image import base64 import io def element_screenshot(driver, element, output_path): # 执行 JavaScript 来获得指定元素的截图 screenshot_base64 = driver.execute_script(""" var ele = arguments[0]; ele.scrollIntoView(true); return ele.toDataURL().split(',')[1];""", element) # 解码 Base64 字符串为字节数据 screenshot_bytes = base64.b64decode(screenshot_base64) # 加载图像并转为 RGB 模式 image_stream = io.BytesIO(screenshot_bytes) img = Image.open(image_stream).convert("RGB") # 存储为 JPEG 文件 img.save(output_path, "JPEG") # 示例:定位某个元素并保存为其截图 driver = webdriver.Firefox() driver.get('https://example.com') element = driver.find_element_by_tag_name('body') # 替换为目标元素的选择器 element_screenshot(driver, element, 'element_screenshot.jpg') ``` 此脚本基于 JavaScript Executor 提供的功能完成目标区域的捕捉工作[^2]。 --- ### 注意事项 - 如果未安装 Pillow 库,则需先运行命令 `pip install pillow` 安装它。 - 当前方案假设所有浏览器均返回标准 PNG 编码的数据;但在某些特殊场景下可能需要进一步验证兼容性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值