我正在编写一个脚本来下载一堆视频,以便可以离线观看它们。我的方法是使用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下载文件。但是,如果没有用于下载文件的按钮,那么我将无法下载文件。