无需手动操作:利用 Playwright 自动上传文件

简介: Playwright是Microsoft的自动化测试工具,支持Chrome、Firefox和Safari。本文展示了如何用Python和Playwright自动上传文件。`locator.set_input_files()`方法用于选择文件,可上传多个或清除已选文件。当输入元素动态创建时,可监听`page.expect_file_chooser()`事件。示例代码包括直接上传和处理弹出文件选择框的情况。这种方法适用于批量文件上传场景。

image.png

前言

Playwright 是一个由 Microsoft 开发的自动化测试工具,它提供了跨浏览器的自动化测试能力,包括 Chrome、Firefox 和 Safari。除了测试之外,Playwright 还可以用于执行浏览器操作,例如模拟用户行为来实现文件上传功能。在本文中,我们将使用 Playwright 和 Python 实现自动上传文件的功能,这对于那些需要大量上传文件的应用程序来说尤为实用。

文件上传

playwright提供了locator.set_input_files()方法选择要上传的输入文件,它期望第一个参数指向 <input > 的输入元素"file",数组中可以传递多个文件,如果某些文件路径是相对的,则它们将相对于当前工作目录进行解析。空数组清除所选文件。

# 选择一个文件
page.get_by_label("Upload file").set_input_files('myfile.pdf')

# 选择多个文件
page.get_by_label("Upload files").set_input_files(['file1.txt', 'file2.txt'])

# 移除所有文件
page.get_by_label("Upload file").set_input_files([])

如果没有输入元素(它是动态创建的),可以使用 page.on("filechooser") 事件或在您的操作中使用相应的等待方法:

with page.expect_file_chooser() as fc_info:
    page.get_by_label("Upload file").click()
file_chooser = fc_info.value
file_chooser.set_files("myfile.pdf")

相关操作:

  • file_chooser.element 返回与此文件选择器关联的输入元素
  • file_chooser.is_multiple() 返回此文件选择器是否接受多个文件
  • file_chooser.page 返回此文件选择器所属的页面

设置与此选择器关联的文件输入的值。如果其中一些filePaths是相对路径,那么它们将相对于当前工作目录进行解析。对于空数组,清除所选文件

file_chooser.set_files(files)
file_chooser.set_files(files, **kwargs)

相关参数

  • files pathlib.Path
  • no_wait_after 启动导航的操作正在等待这些导航发生并等待页面开始加载。您可以通过设置此标志来选择退出等待。您仅在特殊情况下才需要此选项,例如导航到无法访问的页面。默认为false.
  • timeout 以毫秒为单位的最长时间,默认为 30 秒,传递0以禁用超时,可以使用browser_context.set_default_timeout()page.set_default_timeout()方法更改默认值

实例

下面我们分情况来介绍playwright上传文件的方法。

  1. input 输入框,并且类型是type="file",如下图所示:

image.png

我们可以直接定位输入框,用set_input_files('myfile.pdf') 方法上传文件路径,类似于selenium的send_keys('文件路径.xx')

    page.goto("*****l")

    page.get_by_label("文件名称").fill("xxxx")
    # 不点开文件框的情况下
    page.get_by_label("选择文件").set_input_files('xxx.png')
  1. 不是input输入框,必须点开文件框的情况(selenium上没法实现的操作)

可以使用page.expect_file_chooser() 监听到弹出框,在弹出框上输入文件路径,代码如下:

with page.expect_file_chooser() as fc_info:
        page.get_by_label("选择文件").click()
    page.pause()
    file_chooser = fc_info.value
    file_chooser.set_files(path)

在运行过程中你是感知不到文件选项框弹出来的

异步代码示例:

async with page.expect_file_chooser() as fc_info:
    await page.get_by_text("Upload file").click()
file_chooser = await fc_info.value
await file_chooser.set_files("myfile.txt")

总结

使用 Playwright 和 Python 可以轻松实现文件自动上传功能,这对于需要大量上传文件的应用程序来说是非常实用的。

相关文章
|
1月前
|
安全 网络安全
MarkdownPad 文件访问权限受限导致软件打开后不久闪退解决方法
【8月更文挑战第31天】如果MarkdownPad因权限受限而闪退,可尝试:1)以管理员身份运行;2)检查并修改文件权限,确保有读写权限;3)关闭可能干扰的杀毒软件或防火墙;4)卸载后重新安装,注意选择合适路径并以管理员身份安装。
|
2月前
|
开发工具
如何修改Vscode查看源代码管理版本变动文件的查看方式
这篇文章介绍了如何在VSCode中通过源代码管理插件修改查看源代码版本变动文件的方式,提供了树形视图和列表视图两种查看方法,并说明了如何通过设置选项来切换查看方式,帮助用户根据自己的喜好更高效地查看和管理代码变动。
如何修改Vscode查看源代码管理版本变动文件的查看方式
|
5月前
|
IDE C# 开发工具
C# | 多线程批量下载文件(创建N个线程同时批量下载文件,只需要几行代码而已)
批量下载文件时使用多线程可以有效缩短完成时间,本文将讲解如何使用C#+CodePlus扩展库快速完成多线程的文件下载。 大部分代码由IDE自动生成,需要我们自己编写的代码正好**10行**。也就是说,只需要10分钟,就可以手撸一个多线程的批量下载器。
280 0
C# | 多线程批量下载文件(创建N个线程同时批量下载文件,只需要几行代码而已)
|
5月前
|
Android开发
用Airtest快速实现手机文件读写与删除功能
用Airtest快速实现手机文件读写与删除功能
|
5月前
|
Java 定位技术 语音技术
如何处理 Xcode 上传 IPA 文件后无法在后台架构版本中显示的问题?
如何处理 Xcode 上传 IPA 文件后无法在后台架构版本中显示的问题?
vscode设置自动保存步骤
vscode设置自动保存就不用每次要运行时候去先保存一下才能加载新页面了
14015 0
vscode设置自动保存步骤
|
开发工具 开发者 iOS开发
​ 如何处理Xcode上传IPA文件后无法在后台架构版本中显示的问题?
1、ipa包符合要求,显示正在处理,这种就是成功上传,等待处理即可(根据包大小,一般处理几分钟到一两个钟都有可能) 2、ipa不符合要求,没有出现正在处理,或者刷新页面正在处理的版本消失 出现这种情况说明你上传的这个ipa包有问题,苹果会发送具体原因到邮箱(开发者账号就是邮箱地址,) 登录邮箱去查看反馈邮件(反馈邮件也可能在垃圾箱),修改错误重新再打包上传。
​  如何处理Xcode上传IPA文件后无法在后台架构版本中显示的问题?
|
Java 定位技术 语音技术
如何处理 Xcode 上传 IPA 文件后无法在后台架构版本中显示的问题?
AU 上传 ipa 出现下图红框提示说明成功上传,但有时 App Store 后台没有出现构建版本,请查看下面详细说明!
|
Java 定位技术 语音技术
​如何处理Xcode上传IPA文件后无法在后台架构版本中显示的问题?
​如何处理Xcode上传IPA文件后无法在后台架构版本中显示的问题?
Goland 开启文件保存自动进行格式化 的两种方式
Goland 开启文件保存自动进行格式化 的两种方式
Goland 开启文件保存自动进行格式化 的两种方式
下一篇
无影云桌面