当前位置: 首页 > 后端技术 > Node.js

前端使用puppeteer爬虫生成《React.js 小书》PDF并与

时间:2023-04-04 00:17:23 Node.js

合并大家好,我是若川,微信搜索“若川视界”,关注我,一起交流学习。1.什么是傀儡师?puppeteer:谷歌官方的headlessChrome节点库puppeteergithub仓库puppeteerAPI官方介绍:大部分你可以在浏览器中手动完成的操作都可以用Puppeteer来完成!生成页面的屏幕截图和PDF。获取SPA并生成预渲染内容(又名“SSR”)。自动化表单提交、UI测试、键盘输入等。创建最新的自动化测试环境。使用最新的JavaScript和浏览器功能直接在最新版本的Chrome中运行测试。捕获网站的时间线跟踪以帮助诊断性能问题。测试Chrome扩展程序。2.抓取网站生成PDF2.1Installpuppeteer//Installpuppeteer//可能因为网络原因安装失败,可以使用淘宝镜像//npminstall-gcnpm--registry=https://registry.npm。淘宝。orgnpmipuppeteer#or"yarnaddpuppeteer"2.2《React.js小书》介绍《React.js小书》介绍关于作者@胡子大HA这是一本关于React.js的小书。因为在工作中一直在使用React.js,所以一直想总结一下自己对React.js的一些认识和经验。于是慢慢整理写下一些想法,做了一本开源免费专业简单的入门书籍,提供给社区。希望对更多的React.js初学者有所帮助。下图是《React.js 小书》的部分截图:2.3可能用到的一些puppeteerAPI//新建一个reactMiniBook.js,运行nodereactMiniBook.js生成pdfconstpuppeteer=require('puppeteer');(async()=>{//启动浏览器constbrowser=awaitpuppeteer.launch({//无界面默认为true,改成false可以看到浏览器运行,目前生成pdf只支持无界面运行。constdevices=require('puppeteer/DeviceDescriptors');constiPhone=devices['iPhoneX'];等待页面。模拟(iPhone);2.4了解了以上API后,就可以开始编写主程序了。简单的说:实现功能和主要流程。从上面React.js书的截图来看。1.打开浏览器,进入目录页面,生成0.ReactLittleBookCatalog.pdf2.跳转到1.React.js介绍页面,获取左侧所有导航a链接的href和title。3.使用得到的链接数组进行for循环。在这个循环中,主要做了以下事情:3.1隐藏左侧导航,方便生成pdf3.2给标题加上序列号,比如React.js介绍,方便查看3.3设置文档.title加序列号,方便在页眉中使用。3.4隐藏和传播知识这个模块也是一个不错的选择(因为书页链接等信息都设置在页眉和页脚,所以这个是隐藏的)3.5在页面上节和下节添加序号,方便查看。3.6最终声明下pdf说明仅供学习交流,严禁用于商业用途。3.7返回宽高,用于设置视图大小3.8设置视图大小,创建生成pdf4,关闭浏览器具体代码:可以在这里查看爬虫生成的pdf各段代码//节点执行这个文件//作者在这里是的:nodesrc/puppeteer/reactMiniBook.js可以生成如下图:每一节(0-46节)的pdf生成后,那么问题来了,就是可以'看的时候不读一节,打开一节看,很不方便。所以下一步就是将这些pdf合并成一个pdf文件。3.合并成一个PDF文件pdf-merge起初,我使用在线网站Smallpdf来合并PDF。综合效果还是很不错的。该网站还有其他功能。比如word转pdf等等。后来找到社区提供的一个npmpackagepdfmerge。(毕竟作者是写程序的,所以我用代码实现merge。)这个pdf-merge依赖pdftk的安装。PDFtkWindows下载并安装它。笔者安装后,重启电脑即可使用。Debian、Ubuntu安装笔者安装好Ubuntu系统后就可以使用了。apt-getinstallpdftk使用示例constPDFMerge=require('pdf-merge');constfiles=[`${__dirname}/1.pdf`,`${__dirname}/2.pdf`,];//缓冲区(默认)PDFMerge(files).then((buffer)=>{...});//StreamPDFMerge(files,{output:'Stream'}).then((stream)=>{...});//作者在这里使用这个//另存为新文件PDFMerge(files,{输出:`${__dirname}/3.pdf`}).then((buffer)=>{...});知道了这些之后,就可以开始写主程序了。简述主要流程1.读取所有生成的pdf文件的路径,并排序(0-46)2.判断输出文件夹是否存在,不存在则创建3.合并这些section的pdf并保存到一个新文件ReactLittleBook(完整版)-作者:虎子大哈-Timestamp.pdf具体代码:可以在这里查看爬虫生成的pdf《React.js小书》和合并后的pdf代码最终合并后的pdf文件在这里ReactLittle书籍(完整版)-作者:大胡子,可供下载。本以为可以添加书签和页码,但是没有找到合适的生成方案,所以暂时没有添加。如果读者有好的方案,欢迎与作者交流。总结1.Puppeteer是Google出品的官方无头Chrome节点库。大多数可以在浏览器中手动执行的操作都可以使用Puppeteer完成。总之,它可以用来做很多有趣的事情。2.使用puppeteer生成每个section的pdf,使用依赖pdftk的pdf-mergenpm包合并成一个新的pdf文件。或者使用像Smallpdf这样的网站合并。3.《React.js小书》,推荐给大家。爬虫生成pdf,应该对作者@胡子大哈没有影响。一个作者写书为社会服务不容易,所以尽可能支持作者。最后推荐几个链接给大家学习puppeteer。Puppeteer入门教程Puppeteer初探前端自动化测试爬虫生成ES6标准介绍pdf前端大神安利PuppeteerpuppeteerAPI中文文档就在前线|PPT爱好者|知之甚少,唯有善学。个人博客segmentfault前端远景专栏,开通前端远景专栏,欢迎关注掘金专栏,欢迎关注知乎前端远景专栏,开通前端远景专栏,欢迎关注github,欢迎关注~