python+playwright 学习-20.文件下载expect_download()

前言

文件下载操作

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()

download 相关操作

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

download.cancel()

2.删除下载的文件。如有必要,将等待下载完成。

download.delete()

3.返回下载错误(如果有)。如有必要,将等待下载完成。

download.failure()

4.获取下载所属的页面。

download.page

5.下载路径
如果下载成功,则返回下载文件的路径。如有必要,该方法将等待下载完成。该方法在远程连接时抛出。
请注意,下载的文件名是随机 GUID,使用download.suggested_filename获取建议的文件名。

download.path()

返回NoneType|pathlib.Path 类型
6.将下载复制到用户指定的路径。在下载仍在进行时调用此方法是安全的。如有必要,将等待下载完成。

download.save_as(path)

7.返回此下载的建议文件名。
它通常由浏览器根据Content-Disposition响应标头或download属性计算得出。请参阅whatwg上的规范。不同的浏览器可以使用不同的逻辑来计算它。

download.suggested_filename

8.返回下载的 url。

download.url

使用示例

比如有个页面有下载地址

<body>
  <h1>下载文件</h1>
  <a href="https://www.python.org/ftp/python/3.10.10/python-3.10.10-embed-amd64.zip">点我下载</a>
</body>

代码示例

from playwright.sync_api import sync_playwright
# 上海悠悠 wx:283340479  
# blog:https://www.cnblogs.com/yoyoketang/

def run(playwright):
    chromium = playwright.chromium
    browser = chromium.launch(headless=False, slow_mo=3000)
    page = browser.new_page()
    page.goto(r'*************down.html')
    with page.expect_download() as download_info:
        page.get_by_text("点我下载").click()
    download = download_info.value
    # wait for download to complete
    print(download.url)  # 获取下载的url地址
    # 这一步只是下载下来,生成一个随机uuid值保存,代码执行完会自动清除
    print(download.path())
    # 最终可以用save_as 保存到本地
    download.save_as(download.suggested_filename)

    browser.close()


with sync_playwright() as playwright:
    run(playwright)

这样在本地就会看到下载成功的文件

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`page.expect_response(url: Optional[Union[str, Pattern]] = None, *, timeout: Optional[float] = None, predicate: Optional[Callable[[Response], bool]] = None)` 是 Playwright 库中 `page` 对象的一个方法,用于等待一个响应 (Response)。该方法可以传入一个 URL 或正则表达式作为参数,用于匹配响应的 URL,也可以传入一个判断函数作为参数,用于判断响应是否符合条件。如果匹配到了符合条件的响应,该方法会立即返回该响应 (Response) 对象。 该方法的参数说明如下: - `url`:可选参数,匹配响应的 URL。可以传入一个字符串或正则表达式。如果没有传入该参数,则会等待任意一个响应。 - `timeout`:可选参数,设置超时时间 (单位为秒)。如果在指定时间内没有匹配到符合条件的响应,则该方法会抛出超时异常。 - `predicate`:可选参数,一个函数用于判断响应是否符合条件。该函数接受一个 Response 对象作为参数,并返回一个布尔值表示该响应是否符合条件。如果没有传入该参数,则会按照 URL 进行匹配。 示例代码: ```python response = page.expect_response(url='https://www.example.com/', timeout=5000) print(response.status) ``` 该代码会等待页面中的某个请求返回一个 URL 为 `https://www.example.com/` 的响应,并将该响应的状态码打印出来。如果在 5000 毫秒内没有匹配到符合条件的响应,则会抛出超时异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值