如何在Heroku上使用Selenium WebDriver截图及查询截图保存位置
Heroku环境Selenium超时问题排查及截图操作指南
截图文件存储位置说明
Heroku的dyno采用临时文件系统,通过Selenium的截图接口生成的文件,存储规则和本地运行逻辑一致:
- 如果调用
save_screenshot时传入的是相对路径,文件默认保存在Python脚本执行的当前工作目录(即dyno的/app目录下) - 如果传入的是绝对路径,文件会保存在你指定的路径下
注意:所有临时存储的文件会在dyno重启、重新部署或闲置回收后被彻底清除,无法长期保留
查看截图的可行方法
- 日志输出base64方案(推荐)
直接将截图转为base64字符串打印到Heroku运行日志,无需额外存储配置,示例代码如下:
import base64 from selenium import webdriver # 此处为你的driver初始化代码 screenshot_base64 = driver.get_screenshot_as_base64() print("RUNTIME_SCREENSHOT:", screenshot_base64)
后续在本地执行heroku logs --app 你的应用名称即可拉取到日志中的base64编码内容,通过任意base64转图片工具即可还原截图。
- 对接对象存储持久化方案
如果需要长期保存截图,可在代码中调用阿里云OSS、腾讯云COS、亚马逊S3等对象存储服务的SDK,将截图文件直接上传到外部存储,通过存储服务生成的公网链接即可随时查看截图。 - 临时访问dyno本地文件
如果仅需要临时查看运行时截图,可通过heroku run bash --app 你的应用名称指令进入dyno的命令行,或使用Heroku后台的在线终端进入对应目录查看,注意该方式打开的是全新dyno,和你正在运行应用的dyno相互独立,需要在代码中增加截图后的同步逻辑才能获取到运行时生成的文件
超时问题排查补充建议
本地运行正常但Heroku上报TimeoutException,绝大多数是Chrome启动配置缺失导致,可优先检查以下配置项:
Heroku环境运行无头Chrome必须添加专用启动参数,否则会出现启动失败、页面加载超时等问题,参考初始化代码:
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 无头模式配置 chrome_options.add_argument("--headless=new") # 禁用沙箱模式,Heroku环境必须配置 chrome_options.add_argument("--no-sandbox") # 禁用共享内存,避免小内存dyno出现资源不足报错 chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument("--disable-gpu") # 配置页面加载超时时间,可根据需求调整 driver = webdriver.Chrome(options=chrome_options) driver.set_page_load_timeout(30)
同时确认你已经在Heroku应用的buildpack配置中,添加了Google Chrome和ChromeDriver对应的官方构建包,缺少这两个依赖会直接导致Chrome无法启动触发超时。
内容的提问来源于stack exchange,提问作者Kai021195
相关产品推荐
相关产品推荐

