V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xlinux
V2EX  ›  程序员

使用 puppeteer 如何监听到下载文件完成?

  •  
  •   xlinux · 186 天前 · 758 次点击
    这是一个创建于 186 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,使用 puppeteer 如何监听到下载文件完成?下载的动作是通过自动点击 a 链接下载的,

    await element.click();
    

    怎么样才能监听到文件下载完成了呢?之前试过用 download.js ,直接使用 nodejs 下载,但是无法下载。 想实现的功能就是自动地下载蓝奏的资源,然后把下载的资源自动上传到百度网盘。

    2 条回复    2023-10-24 07:49:58 +08:00
    krapnik
        1
    krapnik  
       186 天前   ❤️ 1
    创建 CDPSession 下载文件,监听对应的下载事件:
    ```
    const puppeteer = require('puppeteer');

    (async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    // 创建 CDPSession
    const session = await page.target().createCDPSession();

    // 监听文件下载完成事件
    session.on('Page.downloadWillBegin', async (params) => {
    const { downloadId, url } = params;
    console.log(`开始下载文件:${url}`);

    // 等待下载完成
    await session.send('Page.setDownloadBehavior', {
    behavior: 'allow',
    downloadId,
    downloadPath: '/path/to/save/file', // 指定文件保存路径
    });

    console.log(`文件下载完成:${url}`);
    });

    await page.goto('https://example.com'); // 打开页面进行操作

    await browser.close();
    })();
    ```
    oyasumi
        2
    oyasumi  
       186 天前 via Android   ❤️ 1
    看下载的时候是不是有个后缀为 crd 的文件,隔几秒判断下中间文件存不存在。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2733 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:51 · PVG 19:51 · LAX 04:51 · JFK 07:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.