npm 包 @tsofist/webshot 使用教程

阅读时长 9 分钟读完

前言

在 Web 开发过程中,对于使用截图的需求可能会比较常见,例如网站自动化测试、数据统计分析、页面展示等等。而 Node.js 生态下有一款强大的截图库,就是本文介绍的 @tsofist/webshot 包。该包基于 Node.js 和 PhantomJS(或者 SlimerJS) 构建,可以在不打开浏览器的情况下进行网站的截图操作。

在本文中,我们将详细介绍 @tsofist/webshot 包的使用教程,包括安装和基本使用的指南,以及实现定制和高级功能的深入讲解,最后给出一些应用示例供读者参考。

安装

@tsofist/webshot 包可以通过 npm 包管理器进行安装,只需在命令行输入以下命令:

即可安装成功。

基本用法

@tsofist/webshot 包提供了便捷的接口,可以使用如下的代码段来生成网页截图:

-- -------------------- ---- -------
----- ------- - ----------------------------

------------------------------- ------------ ------------- -
  -- ----- -
    -----------------
  - ---- -
    ---------------------
  -
---

表示通过 webshot 函数生成百度首页的截图,并保存到 baidu.png 文件中。其中:

  • 第一个参数是需要截图的网址地址;
  • 第二个参数是截图保存的文件路径;
  • 第三个参数是回调函数,当截图生成后会触发该回调函数。

另外,@tsofist/webshot 还支持更多的可选配置项,例如:

  • windowSize:窗口的宽度和高度;
  • shotSize:截图区域的宽度和高度;
  • siteType:使用哪种浏览器(PhantomJS 或 SlimerJS)。

深入讲解

定制网页截图

在一些特殊情况下,我们可能需要以不同的截图方式来呈现网页内容。例如,我们希望在截图时只截取页面上的某一部分区域,或者是截取多张图片后合成为一个无缝的全景图片。

@tsofist/webshot 包提供了一个 options 参数,可以方便的定制网页截图。

截取指定区域

如果我们想要截取页面里的特定区域,可以通过设置 options 中的 shotSize 参数来实现。例如:

-- -------------------- ---- -------
----- ------- - ----------------------------

----- ------- - -
  --------- -
    ------ ---------
    ------- -----
  -
--

------------------------------- ---------------- -------- -------- ----- -
  -- ----- -
    -----------------
  - ---- -
    ---------------------
  -
---

该方法将产生一个 baidu-all.png 的图片,该图片包含网页的所有内容。

合并成全景图

如果我们想要将网页截图合并成为一个无缝的全景图片,可以使用 node-canvas 库中的 Canvas 方法。例如:

-- -------------------- ---- -------
----- ------- - ----------------------------
----- ------ - ------------------

----- ------- - -
  --------- -
    ------ ----
    ------- -----
  -
--

------------------------------- -------- ----- ------- -
  -- ----- -
    -----------------
  - ---- -
    ----- ------ - --- ----------- ------
    ----- --- - ------------------------
    ----- --- - --- ---------------
    ------- - -------
    ------------------ -- ---
    ----------------------------------------------------------------------
  -
---

该方法使用 Canvas 在 Node.js 环境下绘制一个新的图片,将多个网页截图合并成一个全景的图片。

高级技巧

为网页增加限制

有时我们需要模仿屏幕大小而不是实际的网站宽度进行截图。有别于默认以屏幕大小截图,我们可以使用 windowSize 参数来模拟屏幕大小,如下所示:

-- -------------------- ---- -------
----- ------- - ----------------------------

----- ------- - -
  ----------- -
    ------ ----
    ------- ----
  -
--

------------------------------- ----------------- -------- -------- ----- -
  -- ----- -
    -----------------
  - ---- -
    ---------------------
  -
---

生成 PDF 文件

如果我们需要将网页保存为 PDF 文件,我们可以使用 PhantomJS PDF 封装器 来实现。该工具类似于 wkhtmltopdf 工具,需要首先安装 PhantomJS 和需要的字体,可以通过以下命令进行安装:

安装完成后,我们可以使用如下代码生成 PDF 文件:

-- -------------------- ---- -------
----- ------- - ----------------------------
----- --------- - --------------------

----- ------- - -
  ----------- -
    ------ ----
    ------- ----
  -
--

------------------------------- -------- ----- ------- -
  -- ----- -
    -----------------
  - ---- -
    ----- ---- - --------------------------
    ----- ---------- - ----- ---------------------------------------
    ---------------------------- ---------------------------- -------- ----- ---- -
      -- ----- -
        -----------------
      - ---- -
        ---------------------
      -
    ---
  -
---

该方法将生成一个名为 baidu.pdf 的文件,包含了网页渲染后的所有内容。

示例代码

  1. 截取整个页面并保存到本地
-- -------------------- ---- -------
----- ------- - ----------------------------

------------------------------- ------------ ------------- -
  -- ----- -
    -----------------
  - ---- -
    ---------------------
  -
---
  1. 截屏特定区域并保存到本地
-- -------------------- ---- -------
----- ------- - ----------------------------

----- ------- - -
  --------- -
    ------ ---------
    ------- -----
  -
--

------------------------------- ---------------- -------- -------- ----- -
  -- ----- -
    -----------------
  - ---- -
    ---------------------
  -
---
  1. 合并截屏成一个全景图
-- -------------------- ---- -------
----- ------- - ----------------------------
----- ------ - ------------------

----- ------- - -
  --------- -
    ------ ----
    ------- -----
  -
--

------------------------------- -------- ----- ------- -
  -- ----- -
    -----------------
  - ---- -
    ----- ------ - --- ----------- ------
    ----- --- - ------------------------
    ----- --- - --- ---------------
    ------- - -------
    ------------------ -- ---
    ----------------------------------------------------------------------
  -
---
  1. 生成 PDF 文件
-- -------------------- ---- -------
----- ------- - ----------------------------
----- --------- - --------------------

----- ------- - -
  ----------- -
    ------ ----
    ------- ----
  -
--

------------------------------- -------- ----- ------- -
  -- ----- -
    -----------------
  - ---- -
    ----- ---- - --------------------------
    ----- ---------- - ----- ---------------------------------------
    ---------------------------- ---------------------------- -------- ----- ---- -
      -- ----- -
        -----------------
      - ---- -
        ---------------------
      -
    ---
  -
---

结语

本文介绍了 @tsofist/webshot 包的基本用法和一些高级技巧,可以帮助读者完成对网页的截图操作、生成 PDF 文件等。同时希望读者可以结合自己实际的应用场景,灵活运用上述技巧,将 @tsofist/webshot 包的强大截图能力发挥到极致。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005730781e8991b448e930b

纠错
反馈