零操作,高效下载:利用Playwright和Python完成文件下载

简介: Playwright是Microsoft开发的跨浏览器自动化测试工具,能模拟用户操作,包括文件下载。在Python中,它提供`expect_download()`来处理文件下载,无需额外工具。下载开始时触发事件,完成后可通过`download.path()`获取路径。下载相关操作包括取消、删除、获取错误信息、所属页面、文件名、URL等。示例代码展示了如何下载pytest的压缩文件,简化了web自动化测试中的文件下载场景。

image.png

前言

Playwright 是一个由 Microsoft 开发的跨浏览器自动化测试工具,它提供了强大的功能来模拟用户在浏览器中的操作。Playwright 还可以应用于诸如文件下载等实际场景的测试。本文将介绍如何利用 Playwright 在 Python 中实现文件下载功能。

文件下载

文件下载也是我们进行web自动化测试时经常需要面对的场景,如果我们使用的是selenium,会出现无法处理Windows系统弹出的对话框的情况,需要借助autoit等第三方工具来实现下载功能,playwright则可以不借助其他工具来实现文件自动下载。

playwright提供了expect_download()操作来实现文件的下载操作,当浏览器上下文关闭时,所有属于浏览器上下文的下载文件都会被删除。
下载开始后会发出下载事件。下载完成后,下载路径可用:

with page.expect_download() as download_info:
    page.get_by_text("Download file").click()
download = download_info.value
# wait for download to complete
path = download.path()

相关操作

  1. 取消下载

如果下载已经完成或取消,则不会失败。成功取消后,download.failure()将解析为'canceled'

download.cancel()
  1. .删除下载的文件
download.delete()
  1. 返回下载错误(如果有)
download.failure()
  1. 获取下载所属的页面
download.page
  1. 下载路径

下载成功,则返回下载文件的路径。如有必要,该方法将等待下载完成。该方法在远程连接时抛出。

download.path()

注:下载的文件名是随机 GUID,使用download.suggested_filename获取建议的文件名

  1. 将下载复制到用户指定的路径。在下载仍在进行时调用此方法是安全的。如有必要,将等待下载完成。
download.save_as(path)
  1. 返回此下载的建议文件名
download.suggested_filename

注:通常由浏览器根据Content-Disposition响应标头或download属性计算得出

  1. 返回下载的 url
download.url

实例

我们以下载我们常用的Python单元测试框架pytest为例,使用playwright的代码如下:

from playwright.sync_api import sync_playwright

def run(playwright):
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context(accept_downloads=True)
    # Open new page
    page = context.new_page()

    page.goto("https://pypi.org/project/pytest/#files")
    #  点击要下载的文件按钮
    with page.expect_download() as download_info:
        page.click("text=pytest-7.3.1.tar.gz")
    download = download_info.value
    path = download.path()
    download.save_as(path)
    # 打印保存路径
    print(path)
    # ---------------------
    context.close()
    browser.close()
with sync_playwright() as playwright:
    run(playwright)

运行脚本,结果如下,我们可以看到,我们正在下载pytest的压缩文件。

image.png

总结

使用 Playwright 和 Python,我们可以轻松实现文件下载功能,这对于需要大量下载文件的应用程序来说非常实用。

相关文章
|
3天前
|
Python
高阶函数如`map`, `filter`, `reduce`和`functools.partial`在Python中用于函数操作
【6月更文挑战第20天】高阶函数如`map`, `filter`, `reduce`和`functools.partial`在Python中用于函数操作。装饰器如`@timer`接收或返回函数,用于扩展功能,如记录执行时间。`timer`装饰器通过包裹函数并计算执行间隙展示时间消耗,如`my_function(2)`执行耗时2秒。
13 3
|
5天前
|
Python
Python使用ffmpeg下载m3u8拼接为视频
Python使用ffmpeg下载m3u8拼接为视频
16 1
|
13天前
|
Java Serverless 应用服务中间件
Serverless 应用引擎操作报错合集之部署python项目时,构建过程报错,怎么解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
3天前
|
存储 Go 索引
牢记python对象的操作方式
【6月更文挑战第20天】在Python中,`hash()`和`is`帮助确定对象的相等性。`dir()`和`vars()`揭示对象的属性和内部表示,`__slots__`优化内存使用。列表和字典结构有不同的内存和性能特性,字典使用哈希表进行快速访问。
22 5
牢记python对象的操作方式
|
4天前
|
Python
Python列表推导式是一种简洁的创建新列表的方式,它允许你在一行代码中完成对数据的操作和转换
【6月更文挑战第19天】Python列表推导式是创建新列表的简洁语法,它在一行内处理数据。表达式如`[expr for item in iterable if cond]`,其中`expr`是对元素的操作,`item`来自`iterable`,`if cond`是可选过滤条件。例如,将数字列表平方:`[x**2 for x in numbers]`。嵌套列表推导处理复杂结构,如合并二维数组:`[[a+b for a,b in zip(row1, row2)] for row1, row2 in zip(matrix1, matrix2)]`。简洁但勿过度复杂化。
13 5
|
4天前
|
Python
Python教程:Python中的输入与输出操作
在编程语言中,输入(Input)和输出(Output),简称I/O,是基础且重要的概念。Python作为一门易于学习且功能强大的编程语言,在处理输入和输出方面提供了多种方式。本文将深入探讨Python中的输入输出操作,包括标准输入输出、文件操作、以及网络I/O等领域
13 4
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
豆瓣评分9.5!清华大牛熬夜整理的Python深度学习教程开发下载!
深度学习目前已经成为了人工智能领域的突出话题。它在“计算机视觉和游戏(AlphaGo)等领域的突出表现而闻名。 今天给小伙伴们分享的这份手册,详尽介绍了用 Python 和 Keras进行深度学习的探索实践,涉及计算机视觉、自然语言处理、生成式模型等应用。
|
3天前
|
SQL Oracle 关系型数据库
Python连接数据库进行数据查询的操作代码
mysql数据库(mariadb) 连接数据库 首先,你需要使用MySQLdb.connect()函数建立与MySQL数据库的连接。你需要提供数据库服务器的地址(host),用户名(user),密码(passwd),以及你想要操作的数据库名称(db)。 创建Cursor对象 一旦建立了数据库连接,你可以使用连接对象的cursor()方法来创建一个cursor对象。这个方法返回一个cursor实例,你可以使用这个实例来执行SQL查询和命令。
|
5天前
|
Python
【干货】python xlwt写入excel操作
【干货】python xlwt写入excel操作
10 2
|
5天前
|
Python
【干货】Python下载网络小说
【干货】Python下载网络小说
11 2