nodejs抓取动态网页( U盘安装好几次都失败了,全局一次就成功了)
优采云 发布时间: 2021-12-31 10:19nodejs抓取动态网页(
U盘安装好几次都失败了,全局一次就成功了)
<p>原文传送门:https://www.ic365club.com/article/detail?id=MA217p10rc08
开发的需求中难免会遇到下载文件的要求,下载自定义HTML文件的需求尤为显著。而不是所有的用户都知道HTML,但是知道和使用pdf的肯定多余HTML的,将HTML文件转pdf提供下载优化用户体验自然也就成为各位内卷的又一目标啦!<br />
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kRxh9Tvd-1633685073551)(/article/img/AI21bk10pz08.jpg “奋斗”)]
加油奥利给冲起来(别想歪了)
文章目录
思路方法一安装举例
方法二安装使用api文档
总结
<a id="_10"></a>思路
其实吧,其实吧方法挺多的,看大家接受哪种了。
1.前端客户自己生成图片,我的网站有几个demo。https://www.ic365club.com/picture/,类似这样的形式,但是局限比较大。我当时做的时候遇到了很多bug,很久没有去看了(bug运行起来就不要动它了)。兼容性不好,会受到浏览器、终端、内核、样式的影响。【pass】
2.使用python来搞,python大法好啊。但是网上看了一圈说速度也是不快,不能说慢,只能说不快。(知道的大佬可以评论区科普哈哈)【pass】<br /> [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zL1don5B-1633685073553)(http://img.doutula.com/production/uploads/image/2019/08/10/20190810417473_icDjId.jpg “python”)]
3.1使用nodejs模块html-pdf。这个还算可以,但是不支持远程url和一些标签渲染不出来,比如有的img标签,但有的又可以。【备选】<br /> [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XwBSsxaw-1633685073554)(http://img.doutula.com/production/uploads/image/2020/02/05/20200205899703_YNsciS.jpg “妙啊”)]
3.2使用nodejs模块puppeteer,这个模块不像上面的那个,这个是调用Chrome内核做无头浏览器,本质上是使用浏览器生成的。这个有点明显可以使用远程url也可以使用本地链接,而且对样式的渲染也比较好,出来的是彩色的。<br /> [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RVtZLhI0-1633685073555)(http://img.doutula.com/production/uploads/image/2019/01/01/20190101274861_vPERiw.png “成了”)]
<a id="_23"></a>方法一
使用nodejs模块html-pdf。
<a id="_25"></a>安装
npm i html-pdf
</p>
最好使用全局安装,一些依赖是全局安装的,这样就不会报错了。我在U盘上安装了几次都失败了,但是全局成功了一次。
例如
var fs = require('fs');
var pdf = require('html-pdf');// 这种则是依靠自己本事转pdf的,这种方式样式兼容不太好,渲染结果是黑白的
var html = fs.readFileSync('pdf2.html', 'utf8');
var options = { format: 'Letter' };// api请查看npm,因为一直再更新,请根据官方为主。
pdf.create(html, options).toFile('./businesscard.pdf', function(err, res) {
if (err) return console.log(err);
console.log(res); // { filename: '/app/businesscard.pdf' }
});
欲了解更多信息,请参阅官方网站。
方法二
使用 nodejs 模块 puppeteer
安装
npm i puppeteer
npm i puppeteer-core
最好使用全局安装,一些依赖是全局安装的,这样就不会报错了。我在U盘上安装了几次都失败了,但是全局成功了一次。
安装此软件包时,将安装浏览器内核。如上所述,这个包是通过操作无头浏览器生成的。
[外部链接图像传输失败。源站可能有反水蛭链接机制。建议保存图片直接上传(img-Uez791Aj-56)(/article/img/AI217e10f108.png "Kernel") )]
利用
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(__dirname+'/pdf.html', { //这个可以渲染出图片甚至跨域的图片
waitUntil: 'networkidle2',
});
await page.pdf({ path: 'hn1.pdf', format: 'a4' }); // 如果已有该文件会报错
await browser.close();
})();
在第 6 行中,我渲染了一个本地文件,因此我采用了文件的绝对路径。
具体选项请参考 npm。
中文文件
#/
api文档
右上角“相关信息”已经下载了api
总结
1.尝试全局安装
2.如果出错,请仔细阅读错误报告。一般是缺少某个依赖,安装即可。
3. 我用的两个node包速度差不多,不快
4. 找了python的方法,说比较慢,我就没有再试python了。如果你有兴趣,请告诉我你是否尝试过。哈哈
[外部链接图像传输失败。源站可能有反水蛭链接机制。建议保存图片直接上传(img-d3rn2bNm-56)("响指")]
原创门户:
——————————