下载
介绍
对于页面下载的每个附件,都会触发 page.on("download") 事件。所有这些附件都会下载到一个临时文件夹中。您可以使用来自该事件的 Download 对象获取下载的 URL、文件名和有效负载流。
您可以使用 browser_type.launch() 中的 downloads_path 选项指定将文件持久化保存的位置。
备注
下载的文件在生成它们的浏览器上下文关闭时会被删除。
以下是处理文件下载的最简单方法:
- 同步
- 异步
# 开始等待下载
with page.expect_download() as download_info:
# 执行启动下载的操作
page.get_by_text("下载文件").click()
download = download_info.value
# 等待下载过程完成并将下载的文件保存到某个位置
download.save_as("/path/to/save/at/" + download.suggested_filename)
# 开始等待下载
async with page.expect_download() as download_info:
# 执行启动下载的操作
await page.get_by_text("下载文件").click()
download = await download_info.value
# 等待下载过程完成并将下载的文件保存到某个位置
await download.save_as("/path/to/save/at/" + download.suggested_filename)
变体
如果您不知道是什么启动了下载,您仍然可以处理该事件:
- 同步
- 异步
page.on("download", lambda download: print(download.path()))
async def handle_download(download):
print(await download.path())
page.on("download", handle_download)
请注意,处理该事件会分叉控制流并使脚本更难以跟踪。由于主控制流不等待此操作解析,您的场景可能会在下载文件时结束。
备注
有关上传文件,请参阅上传文件部分。