⤵️ 浏览器下载
本节介绍对浏览器下载任务进行设置的功能。
✅️ 概述
📌 功能
DrissionPage 提供以下功能,用于对浏览器下载任务进行控制:
- 每个 tab 对象可独立设置文件保存路径
- 下载前可指定文件名称,实现文件重命名
- 可设置存在同名文件时的处理方式
- 可获取任务下载进度
- 可等待下载任务结束
- 可取消任务
- 可拦截下载任务并获取其信息
⚠️ 注意事项
📌 记得等待任务结束
因技术原因,程序在下载结束时才能对其重命名,在这之前文件名是临时的任务 id。
因此必需等待下载完毕,文件名才能正确命名。无论是否指定文件名都一 样。
示例:
page = ChromiumPage()
page('#button').click() # 点击下载按钮
page.wait.download_begin() # 等待下载开始
page.wait.all_downloads_done() # 等待所有任务结束
📌 多 Tab 操作时推荐设置临时路径
程序需要把任务下载到一个指定位置,完成后再移动到目标路径,因此,如果程序涉及多个 Tab 触发下载任务,最好给 Page 对象设置一个下载路径。
即使每个 Tab 对象都设置了自己的路径。
示例:
page = ChromiumPage()
page.set.download_path('tmp') # 设置总路径
tab1 = page.get_tab(2)
tab1.set.download_path('path1')
tab2 = page.get_tab(3)
tab2.set.download_path('path2')
Tips
这个示例中,page
本身就是一个标签页,所以这里有 3 个标签页。
如果get_tab()
获取page
的标签页进行设置,会覆盖page
的设置。
📌 启动下载管理功能
本节介绍的下载管理功能默认不开启,此时触发下载任务和手动操作没有区别。
当启动配置中设置了下载路径,或调用set.download_path()
方法时,管理功能才会启动。
使用clcik.to_download()
方法会自动自动此功能。
✅️ click.to_download()
很多下载是由点击触发的,元素对象有这个方法,可以实现点击后返回下载任务对象。
可以设置下载路径、指定文件名名称。
注意
- 有些下载任务是点击后弹出新 tab,在新 tab 触发下载,此时必须设置
new_tab=True
- 点击后等待下载触发时间为页面对象
timeout
属性(默认10秒),如果需要更久的等待,用下文介绍的方法。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
save_path | str Path | 必填 | 保存路径,为None 保存在原来设置的,如未设置保存到当前路径 |
rename | str | None | 重命名文件名,为None 则不修改 |
suffix | str | None | 指定文件后缀,为None 则不修改 |
new_tab | bool | False | 该下载是否在新 tab 中触发 |
by_js | bool | False | 是否用 js 方式点击,逻辑与click() 一致 |
timeout | float | None | 超时时间,为None 时使用页面对象默认超时时间 |
返回类型 | 说明 |
---|---|
DownloadMission | 下载任务对象 |
示例:
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get('https://im.qq.com/pcqq/index.shtml')
ele = page('全新体验版下载')
ele.wait.has_rect()
mission = ele.click.to_download(save_path='tmp', rename='QQ.exe')
mission.wait()
click.to_download()
方法能够应付多数情况,不是点击触发的下载任务或更复杂的情况,请根据下文介绍的配置方式使用。
✅️ 设置下载路径
📌 设置总下载路径
使用 Page 对象的set.download_path()
方法设置下载路径。不设置时,默认下载到程序当前路径。
Page 对象设置下载路径后,后续新建的 Tab 对象均会使用该地址,之前建立的 Tab 对象如没有设置过自己的路径,也会改用新路径。
使用该方法时,内置DownloadKit
对象(如有)的下载路径也会同时改变。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
path | str Path | 必填 | 下载路径 |
返回:None
示例:
page = ChromiumPage()
page.set.download_path(r'C:\tmp')
📌 设置 Tab 下载路径
使用方法与设置 Page 的一致,但只在当前 Tab 对象生效。
示例:
page = ChromiumPage()
tab = page.get_tab(2) # 创建Tab对象
tab.set.download_path(r'C:\tmp1') # 设置Tab下载路径