Selenium如何不本地保存截图直接上传至远端?(Python实现)
实现思路
核心是调用Selenium内置的get_screenshot_as_png()方法直接获取截图的二进制字节流,不需要写入本地磁盘,再把字节流作为文件参数传递给上传请求即可省略本地存储环节。
前置依赖
- 需要提前安装对应库:
pip install selenium requests - 提前配置好Selenium对应的浏览器驱动(如ChromeDriver),保证可以正常启动浏览器
完整代码示例
from selenium import webdriver import requests # 初始化浏览器,也可以用无头模式降低资源占用 options = webdriver.ChromeOptions() # 如需无头模式可以打开下面的注释 # options.add_argument("--headless=new") driver = webdriver.Chrome(options=options) # 打开目标页面 driver.get("https://www.example.com") # 直接获取截图二进制字节流,全程不写入本地磁盘 screenshot_bytes = driver.get_screenshot_as_png() driver.quit() # 上传到指定API/图床 upload_url = "替换为你自己的上传接口地址" # 构造文件上传参数,字段名需要和接口要求的文件字段完全匹配 files = { # 三个参数分别对应:接口文件字段名、自定义文件名、截图MIME类型 "image": ("screenshot.png", screenshot_bytes, "image/png") } # 如果接口需要鉴权或者其他头参数,在这里补充 headers = { "Authorization": "Bearer 替换为你的鉴权信息" } # 如果接口需要额外的表单参数,在这里补充 data = { "album_id": "12345" } response = requests.post(upload_url, files=files, headers=headers, data=data) # 打印上传结果 print(f"上传状态码:{response.status_code}") print(f"接口返回内容:{response.json()}")
注意事项
- 如果你的上传接口接受base64格式的截图,可以把
get_screenshot_as_png()替换为get_screenshot_as_base64(),直接传递base64字符串即可 - 部分图床接口的文件字段名可能为
file而不是image,需要根据你对接的接口文档调整files字典的键名 - 如果是截取元素级别的截图,可以调用对应WebElement对象的
screenshot_as_png属性获取对应元素的截图字节流,用法和全页截图一致
内容的提问来源于stack exchange,提问作者ruochen
相关产品推荐
相关产品推荐

