Python的Playwright - 1.4 Download

Download对象由页面通过page.on(" Download ")事件分派

from playwright.sync_api import sync_playwright

with sync_playwright() as sp:
    browser = sp.chromium.launch(headless=False)
    context = browser.new_context(accept_downloads=True)
    page = context.new_page()
    # 代码实现
    page.goto("https://www.runoob.com/try/try.php?filename=tryhtml5_a_download")
    # Click download button
    with page.expect_download() as download_info:
        page.frame(name="iframeResult").click('img[alt="runoob.com"]')
    download = download_info.value
    # 等待下载完成,path为下载文件的存储路径,执行context.close()之后,下载的文件会被删除
    path = download.path()
    context.close()
    browser.close()
  • download.cancel(): 取消下载。如果下载已经完成或取消,则不会失败。成功取消后,download.failure()将解析为’canceled’
  • download.delete(): 删除下载的文件,由于上下文关闭之后会自动删除,所以不常用
  • download.failure(): 如果有,则返回下载错误
  • download.page: 获取下载所属的页面
with page.expect_download() as download_info:
    page.frame(name="iframeResult").click('img[alt="runoob.com"]')
download = download_info.value
path = download.path()
print(download.page)
# <Page url='https://www.runoob.com/try/try.php?filename=tryhtml5_a_download'>
  • download.path(): 参考上述代码
  • download.save_as(path): 将下载复制并重命名到用户指定的路径,在下载过程中调用此方法是安全的
with page.expect_download() as download_info:
    page.frame(name="iframeResult").click('img[alt="runoob.com"]')
download = download_info.value
path = download.path()
download.save_as(path='./image.png')
  • download.suggested_filename: 人为点击下载按钮得到的文件名
  • download.url: 下载文件的url

看完上面的之后不知道是否还记得开始说的,Download对象由页面通过page.on(" Download ")事件分派,看到下面代码之后就知道为什么没有用page.on()监听事件来分析download

from playwright.sync_api import sync_playwright
import time

with sync_playwright() as sp:
    browser = sp.chromium.launch(headless=False)
    context = browser.new_context(accept_downloads=True)
    page = context.new_page()
    # 代码实现
    page.on("download", lambda download: print(download.page))
    page.goto("https://www.runoob.com/try/try.php?filename=tryhtml5_a_download")
    # Click text=点击此处访问 w3school.com.cn
    page.frame(name="iframeResult").click('img[alt="runoob.com"]')
    time.sleep(2)
    context.close()
    browser.close()

如果没有上面的等待时间,由于代码运行太快,可能下载放动作还没做出来,就直接关闭了上下文,可以自行测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值