使用Nodejs+puppeteer 批量保存网页为图片或PDF

举报
拿我格子衫来 发表于 2022/03/18 00:25:02 2022/03/18
【摘要】 学习Three.js的时候,看到官方提供了很多很多的example,实在太多了,但并不是每个我都感兴趣,想去了解,但我又记不住每个链接对对应的效果是什么样的,于是我想,能不能把所有的案例用图片保存下来,用图片来对异性每一个example不是更直接明了吗? 于是我准备写一个工具,这个工具可以批量将网页保存成图片或PDF并且生成对应的图片案...

学习Three.js的时候,看到官方提供了很多很多的example,实在太多了,但并不是每个我都感兴趣,想去了解,但我又记不住每个链接对对应的效果是什么样的,于是我想,能不能把所有的案例用图片保存下来,用图片来对异性每一个example不是更直接明了吗? 于是我准备写一个工具,这个工具可以批量将网页保存成图片或PDF并且生成对应的图片案例页面,或json数据

说干就干

因为对nodejs比较数据,于是就选择用nodejs+puppeteer来实现这个小工具.当然python也是可以的.

首先是获取所有的example链接

在控制台输入下面这段代码就会获取所有example的链接json数组

代码如下:


  
  1. let linkArr = [...document.querySelector('#content').querySelectorAll('a')].map(x => {
  2. return {
  3. href:x.href,
  4. name:x.innerText.replace(/\//g, '_',)
  5. }
  6. })
  7. console.log(linkArr)

 

效果如图:

 

主程序代码如下

使用async await 递归example的链接数组 进行截图,保存.

 


  
  1. const puppeteer = require('puppeteer');
  2. (async () => {
  3. const link = {
  4. linkArr: [
  5. {nam:'animation_cloth', href :'http://172.16.7.199:8000/examples/webgl_animation_cloth.html'},
  6. {name:'animation_keyframes',href:'http://172.16.7.199:8000/examples/webgl_animation_keyframes.html'}]
  7. }
  8. const browser = await puppeteer.launch({
  9. executablePath:'./chrome-win/chrome.exe',
  10. // headless:false,
  11. defaultViewport :{width:1920,height:1080}});
  12. const linkArr = link.linkArr
  13. let i = 0
  14. async function forGet() {
  15. let x = linkArr[i]
  16. const page = await browser.newPage();
  17. await page.goto(x.href);
  18. await setTimeout(x => {}, 5000)
  19. await page.screenshot({path: x.name+'.jpg'});
  20. i++
  21. if (i < linkArr.length) {
  22. forGet()
  23. } else {
  24. await browser.close();
  25. }
  26. }
  27. forGet()
  28. // let linkArr = [...document.querySelector('#content').querySelectorAll('a')].map(x => {
  29. // return {
  30. // href:x.href,
  31. // name:x.innerText.replace(/\//g, '_',)
  32. // }
  33. // })
  34. // console.log(linkArr)
  35. })()

当然这个程序有很多大的性能提升空间,比如并发请求链接,而不是同步. 再比如多线程.都是不错的方案

文章来源: fizzz.blog.csdn.net,作者:拿我格子衫来,版权归原作者所有,如需转载,请联系作者。

原文链接:fizzz.blog.csdn.net/article/details/97500132

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。