如何使用puppeteer下载.webm视频?

时间:2018-12-26 11:15:52

标签: javascript web-scraping chromium puppeteer

我正在编写一个脚本来下载一堆视频,以便可以离线观看它们。我的方法是使用puppeteer抓取页面并下载视频,但我不知道如何使用伪造者下载视频。如果我在Chrome中手动进行操作,则可以右键单击视频,然后单击另存为视频。但是我不明白如何在can中创建这种请求。

以下是我要下载哪种类型的视频的示例: https://frontendmasters.com/courses/mongodb/

我现在要做的是首先通过以下方式获取视频的src:

document.querySelector('video').src

然后我page.goto那个src,然后被卡住:)。我试图模拟右键单击并另存为,但这不起作用。我假设操纵up只是在页面中单击,而右键单击弹出窗口是浏览器而不是页面的一部分,因此单击不起作用。这是我的代码:

const puppeteer = require('puppeteer');

puppeteer.launch({
  headless: false,
  defaultViewport: {
    width: 1280, height: 800
  },
  devtools: false
})
.then(async browser => {
  try {
    const page = await browser.newPage();
    await page.setViewport({ width: 1280, height: 800 })

    const url 
    await page.goto(url)
    // Setting Download Location
    const currentDirPath = process.cwd();
    await page._client.send('Page.setDownloadBehavior', {
      behavior: 'allow',
      downloadPath: `${currentDirPath}/Downloads`
    });

    // make sure URL is on page
    await page.waitFor('video');
    // move mouse over video
    await page.mouse.move(200, 200)
    // right click on video
    await page.mouse.down({button: 'right'})

    // offset to end up on save as button
    const offsetX = 139
    const offsetY = 82

    await page.waitFor(5000)
    await page.mouse.move(200 + offsetX, 200 + offsetY)
    await page.mouse.down({button: 'left'})

  } catch (e) {
    console.warn(e)
  }
})

您知道一种如何在浏览器中模拟此“另存为”请求的方式,或者如何使用puppeteer模拟此类文件的其他输入方式?设置page._clien.send()且页面上有专门用于下载文件的按钮时,我确实设法通过puppeteer下载文件。但是,如果没有用于下载文件的按钮,那么我将无法下载文件。

0 个答案:

没有答案