python playwright 库上传和下载操作(自动化测试 playwright)

 更新时间:2023年05月17日 09:33:19   作者:番茄牛腩不吃番茄  
这篇文章主要介绍了python playwright 库上传和下载操作(自动化测试 playwright ),playwright中的上传和下载比selenium的上传和下载要简便些,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下

python:自动化测试 playwright 库上传和下载

今天主要是聊聊playwright中的上传和下载操作,playwright中的上传和下载比selenium的上传和下载要简便些,例:selenium中的上传还要有对话框选择文件,再点击上传,而playwright中是找到元素执行点击后设置一个文件位置。

上传

操作语法

# 选择一个文件
page.set_input_files('input#upload', 'myfile.pdf')
# 选择多个文件
page.set_input_files('input#upload', ['file1.txt', 'file2.txt'])
# 删除所有选定的文件
page.set_input_files('input#upload', [])
# 从内存上传缓冲区
page.set_input_files(
    "input#upload",
    files=[
        {"name": "test.txt", "mimeType": "text/plain", "buffer": b"this is a test"}
    ],
)

上述的代码中这种是那种含输入元素(它动态创建的)的上传操作,如果是可点击的上传操作,可以直接使用下述语法:

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

上传示例
该示例主要演示的是可点击的上传操作,动态输入元素的上传没找到对应示例:

import time
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
    browser = p.chromium.launch(
        headless=False
    )
    page = browser.new_page()
    page.goto("https://域名/user/login")
    page.click('//*[text()="密码登录"]')
    page.click('#user_name')
    page.fill('#user_name', "账号")
    page.click('#password')
    page.fill('#password', "密码")
    page.click('//*[text()="登 录"]')
    time.sleep(2)
    page.click('//*[text()="学习资源"]')
    page.click('//*[@href="/manager/resource/directory" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" ]')
    page.click('//*[text()="导入导出"]')
    time.sleep(2)
    with page.expect_file_chooser() as fc_info:
        page.click('//*[text()=" 上传文件"]')
    file_chooser = fc_info.value
    print(file_chooser)
    file_chooser.set_files('E:\playwrightPyinstaller\导入知识目录.xlsx')
  • expect_file_chooser方法是官方提供的上传方法,不作过多解释,用就是了
  • fc_info.value是获取到了上传的相关元素,然后赋值给file_chooser
  • 调用set_files方法,然后传入文件路径

print(file_chooser)打印的结果如下:

<FileChooser page=<Page url='https://域名/manager/resource/directory'> element=JSHandle@<input type="file" accept=".xlsx,.xls"/>>
Process finished with exit code 0

下载

操作语法

# 开始等待下载
with page.expect_download() as download_info:
    # 执行启动下载的操作
    page.click("button#delayed-download")
download = download_info.value
# 等待下载过程完成
path = download.path()

上述代码是下载的语法,这也是处理文件下载的最简单方法。

下载示例

import time
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
    browser = p.chromium.launch(
        headless=False
    )
    context = browser.new_context(
        accept_downloads=True
    )
    page = context.new_page()
    page.goto("https://域名/user/login")
    page.click('//*[text()="密码登录"]')
    page.click('#user_name')
    page.fill('#user_name', "账号")
    page.click('#password')
    page.fill('#password', "密码")
    page.click('//*[text()="登 录"]')
    time.sleep(2)
    page.click('//*[text()="学习资源"]')
    page.click('//*[@href="/manager/resource/directory" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" ]')
    page.click('//*[text()="导入导出"]')
    time.sleep(2)
    with page.expect_download() as download_info:
        page.click('//*[@href="//域名/template/导入知识目录.xlsx" rel="external nofollow"  rel="external nofollow" ]')
    download = download_info.value
    print(download)
    print(download.path())
  • 下载和上传的区别就是必须要引入上下文,官网提供的上下文就是使用browser.new_context(accept_downloads=True),方法的括号中必须要有accept_downloads=True,不然运行就会报错。
  • expect_download方法是官方提供的下载方法,不作过多解释,用就是了
  • download_info.value是获取到了上传的相关元素,然后赋值给download

print(file_chooser)打印的结果如下:

<Download url='https://域名/template/%E5%AF%BC%E5%85%A5%E7%9F%A5%E8%AF%86%E7%9B%AE%E5%BD%95.xlsx' suggested_filename='导入知识目录.xlsx'>
Process finished with exit code 0

print(download.path())是获取下载后的存储路径,打印的结果如下:

C:\Users\lifeng\AppData\Local\Temp\playwright-artifacts-H0nUyZ\2b71684d-7471-4055-9581-6cb364b50efc
Process finished with exit code 0

当然您也可以进行自定义存储路径,这个官方也是提供了相应方法:

import time
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
    browser = p.chromium.launch(
        headless=False
    )
    context = browser.new_context(
        accept_downloads=True
    )
    page = context.new_page()
    page.goto("https://lms3.9first.com/user/login")
    page.click('//*[text()="密码登录"]')
    page.click('#user_name')
    page.fill('#user_name', "账号")
    page.click('#password')
    page.fill('#password', "密码")
    page.click('//*[text()="登 录"]')
    time.sleep(2)
    page.click('//*[text()="学习资源"]')
    page.click('//*[@href="/manager/resource/directory" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" ]')
    page.click('//*[text()="导入导出"]')
    time.sleep(2)
    with page.expect_download() as download_info:
        page.click('//*[@href="//域名/template/导入知识目录.xlsx" rel="external nofollow"  rel="external nofollow" ]')
    download = download_info.value
    download.save_as('E:\playwrightPyinstaller\导入知识目录.xlsx')

download.save_as(path)方法即是官方提供的自定义路径存储,path路径必须要是路径和文件名称在一起,不然就会抛出权限不足的错误异常。

以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,直接私信留言会及时修正发布;非常期待你的点赞和分享哟,谢谢!

到此这篇关于python playwright 库上传和下载操作(自动化测试 playwright )的文章就介绍到这了,更多相关python playwright 库上传和下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python如何通过手肘法实现k_means聚类详解

    Python如何通过手肘法实现k_means聚类详解

    K-means聚类算法是一种常见的无监督学习算法,用于将数据集分成k个不同的簇,下面这篇文章主要给大家介绍了关于Python如何通过手肘法实现k_means聚类的相关资料,需要的朋友可以参考下
    2023-04-04
  • python xml解析实例详解

    python xml解析实例详解

    这篇文章主要介绍了python xml解析实例详解的相关资料,这里举例说明如何实现,需要的朋友可以参考下
    2016-11-11
  • python 制作python包,封装成可用模块教程

    python 制作python包,封装成可用模块教程

    这篇文章主要介绍了python 制作python包,封装成可用模块教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • 解决pip install psycopg2出错问题

    解决pip install psycopg2出错问题

    这篇文章主要介绍了解决pip install psycopg2出错问题。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • flask后端request获取参数的几种方式整理

    flask后端request获取参数的几种方式整理

    这篇文章主要为大家介绍了flask后端request获取参数的几种方式整理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Python常用算法学习基础教程

    Python常用算法学习基础教程

    这篇文章主要学习Python常用算法,Python常用排序算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一
    2017-04-04
  • 一起来学习一下python的数字类型

    一起来学习一下python的数字类型

    这篇文章主要为大家详细介绍了python的数字类型,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Pandas数据集的合并与连接merge()方法

    Pandas数据集的合并与连接merge()方法

    Pandas数据集的合并与连接(merge())是数据处理过程中常用的操作之一,在使用Pandas进行数据集合并时,可以使用merge()函数将两个或多个数据集按照指定的列进行合并,本文就来介绍一下,感兴趣的可以了解一下
    2023-11-11
  • 通过Python的jieba库对文本进行分词

    通过Python的jieba库对文本进行分词

    Python的jieba库是一个中文分词工具,它可以将一段中文文本分割成一个一个的词语,方便后续的自然语言处理任务,如文本分类、情感分析等,本文给大家介绍如何通过Python的jieba库对文本进行分词,文中详细的代码示例,需要的朋友可以参考下
    2023-05-05
  • 零基础写python爬虫之使用urllib2组件抓取网页内容

    零基础写python爬虫之使用urllib2组件抓取网页内容

    文章详细介绍了在python2.5环境下,如何使用urllib2这个python自带的组件进行抓取指定网页内容的,整个过程记录的非常的详细,也很简单,有需要的朋友可以参考下,写出自己的python爬虫
    2014-11-11

最新评论