【问题标题】:Waiting for download to complete on Puppeteer在 Puppeteer 上等待下载完成
【发布时间】:2022-07-27 02:12:30
【问题描述】:

我有一个使用 node.js 和 puppeteer 制作的脚本,它从按钮下载文件(不会重定向到 url),所以现在我正在使用 await await page.waitForTimeout(1000); 等待下载完成但它有一些缺陷,例如:

根据连接情况,完成下载可能需要超过 1000 毫秒的时间,也可能需要更少的时间,这与完成下载所需的时间相比没有意义。

我的问题是,有没有办法使用 Node+Puppeteer 等待下载完成?我曾尝试使用 waitUntil: 'networkidle0 和 networkidle2,但似乎都在等待。

代码如下:

const path = require('path');

const puppeteer = require('puppeteer');

(async () => {

  /* Initialize some variables */
  
  const browser = await puppeteer.launch();

// Instantiates a new page
  const page = await browser.newPage(); 

// Gets current path
  const downloadPath = path.resolve('./'); 

// Specifies wether it allows downloading multiple files or not
  await page._client.send('Page.setDownloadBehavior', 
  {behavior: 'allow', downloadPath: downloadPath}); 

// Goes to My Website
  await page.goto('http://localhost:8080/mywebsite');   

// Exports to CSV 
  await page.waitForSelector("#W0009EXPORTAXLS > a > i", {visible: true});
  await page.tap("#W0009EXPORTAXLS > a > i");

  await page.waitForTimeout(1000);

// Log
  console.log('File exported.');

// Closes the browser
  await browser.close(); 
})();

【问题讨论】:

标签: javascript node.js puppeteer


【解决方案1】:

现在是 2022 年。使用 Playwright 摆脱这种群众。 manage downloads

它还有一个更好的用于编写选择器的实时检查器,以及带有多个屏幕截图的时间线跟踪报告用于调试

【讨论】:

    猜你喜欢
    • 2022-07-27
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 2023-01-28
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    相关资源
    最近更新 更多