nodejs抓取动态网页( U盘安装好几次都失败了,全局一次就成功了)

优采云 发布时间: 2021-12-31 10:19

  nodejs抓取动态网页(

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(&#39;fs&#39;);

var pdf = require(&#39;html-pdf&#39;);// 这种则是依靠自己本事转pdf的,这种方式样式兼容不太好,渲染结果是黑白的

var html = fs.readFileSync(&#39;pdf2.html&#39;, &#39;utf8&#39;);

var options = { format: &#39;Letter&#39; };// api请查看npm,因为一直再更新,请根据官方为主。

pdf.create(html, options).toFile(&#39;./businesscard.pdf&#39;, function(err, res) {

if (err) return console.log(err);

console.log(res); // { filename: &#39;/app/businesscard.pdf&#39; }

});

  欲了解更多信息,请参阅官方网站。

  方法二

  使用 nodejs 模块 puppeteer

  安装

  npm i puppeteer

  npm i puppeteer-core

  最好使用全局安装,一些依赖是全局安装的,这样就不会报错了。我在U盘上安装了几次都失败了,但是全局成功了一次。

  安装此软件包时,将安装浏览器内核。如上所述,这个包是通过操作无头浏览器生成的。

  [外部链接图像传输失败。源站可能有反水蛭链接机制。建议保存图片直接上传(img-Uez791Aj-56)(/article/img/AI217e10f108.png "Kernel") )]

  利用

  const puppeteer = require(&#39;puppeteer&#39;);

(async () => {

const browser = await puppeteer.launch();

const page = await browser.newPage();

await page.goto(__dirname+&#39;/pdf.html&#39;, { //这个可以渲染出图片甚至跨域的图片

waitUntil: &#39;networkidle2&#39;,

});

await page.pdf({ path: &#39;hn1.pdf&#39;, format: &#39;a4&#39; }); // 如果已有该文件会报错

await browser.close();

})();

  在第 6 行中,我渲染了一个本地文件,因此我采用了文件的绝对路径。

  具体选项请参考 npm。

  中文文件

  #/

  api文档

  右上角“相关信息”已经下载了api

  总结

  1.尝试全局安装

  2.如果出错,请仔细阅读错误报告。一般是缺少某个依赖,安装即可。

  3. 我用的两个node包速度差不多,不快

  4. 找了python的方法,说比较慢,我就没有再试python了。如果你有兴趣,请告诉我你是否尝试过。哈哈

  [外部链接图像传输失败。源站可能有反水蛭链接机制。建议保存图片直接上传(img-d3rn2bNm-56)("响指")]

  原创门户:

  ——————————

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线