gpt4 book ai didi

javascript - Puppeteer,保存网页和图片

转载 作者:行者123 更新时间:2023-11-29 15:11:57 25 4
gpt4 key购买 nike

我正在尝试保存网页,以供 Nodejs 和 puppeteer 离线使用。我看到很多例子:

await page.screenshot({path: 'example.png'});

但是对于更大的网页,这不是一种选择。所以在 puppeteer 中一个更好的选择是加载页面然后像这样保存:

const html = await page.content();
// ... write to file

好的,行得通。现在我要像推特一样滚动页面。所以我决定屏蔽 puppeteer 页面中的所有图像:

page.on('request', request => {
if (request.resourceType() === 'image') {
const imgUrl = request.url()
download(imgUrl, 'download').then((output) => {
images.push({url: output.url, filename: output.filename})
}).catch((err) => {
console.log(err)
})
request.abort()
} else {
request.continue()
}
})

好的,我现在使用“npm 下载”库下载所有图像。是的,下载图片没问题 :D。

现在当我保存内容时,我想将它指向源中的离线图像。

const html = await page.content();

但是现在我想替换所有的

<img src="/pic.png?id=123"> 
<img src="https://twitter.com/pics/1.png">

还有类似的东西:

<div style="background-image: url('this_also.gif')></div>

那么有没有办法(在 puppeteer 中)抓取一个大页面并将整个内容离线存储?

Javascript 和 CSS 也不错

更新

现在我将用 puppeteer 再次打开这个大的 html 文件。

然后拦截所有文件为: https://dom.com/img/img.jpg ,/文件.jpg, ....

request.respond({
status: 200,
contentType: 'image/jpeg',
body: '..'
});

我也可以使用 chrome 扩展程序来完成。但是我喜欢有一些选项的函数 page.html(),和 page.pdf() 一样

最佳答案

回到第一个,你可以使用fullPage来截屏。

await page.screenshot({path: 'example.png', fullPage: true});

如果你真的想离线下载所有资源,是的,你可以:

const fse = require('fs-extra');

page.on('response', (res) => {
// save all the data to SOMEWHERE_TO_STORE
await fse.outputFile(SOMEWHERE_TO_STORE, await res.buffer());
});

然后,你就可以通过puppeteer离线浏览网站了,一切正常。

await page.setRequestInterception(true);
page.on('request', (req) => {
// handle the request by responding data that you stored in SOMEWHERE_TO_STORE
// and of course, don't forget THE_FILE_TYPE
req.respond({
status: 200,
contentType: THE_FILE_TYPE,
body: await fse.readFile(SOMEWHERE_TO_STORE),
});
});

关于javascript - Puppeteer,保存网页和图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53640405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com