2

参考

前言

之前试过在CentOS7上安装puppeteer并使之能以无头模式正常启动,并正确显示中文字体。
今天尝试了下在Ubuntu18上达到同样目的,这里记录下免得以后忘了。

步骤

  1. 安装nodejs,同CentOS7,略
  2. 安装cnpm,略
  3. 安装puppeteer,直接用cnpm install puppeteer即可
  4. 根据Puppeteer项目主页的Wiki文章,使用下面命令安装缺失的库:

    apt-get install -y gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils
  5. 到这里chrome可以无头启动,但中文字体显示为方块,因为镜像中不包括中文字体。这时只要从Windows中搬运几个常用字体到Ubuntu里即可:

    • 浏览到Windows的字体目录C:\Windows\Fonts
    • 上传几个常用字体,如“宋体 常规”、“微软雅黑”,到ubuntu的/usr/share/fonts目录,文件名为:simsun.ttc, msyh.ttc
    • 安装几个字体工具 sudo apt-get -y install fontconfig xfonts-utils
    • 建立字体索引信息,更新字体缓存,依次执行如下命令:

      1. mkfontscale
      2. mkfontdir
      3. fc-cache
    • 执行fc-list :lang=zh列出系统中文字体,此时应该可以看到若干中文字体

至此,安装完成,可以验证了。

验证(和CentOS步骤一致)

  • 编写index.js,内容如下:

    const puppeteer = require('puppeteer');
    (async () => {
      const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});
      const page = await browser.newPage();
      await page.goto('https://www.segmentfault.com');
      await page.screenshot({path: 'sf.png'});
      await browser.close();
    })();

    注意:
    1) 必须加上--no-sandbox参数启动chrome,否则报错
    2) 默认就是以无头(无界面)模式启动chrome,即自带--headless参数

  • node index.js执行上述脚本,会在当前目录下产生思否首页截图,可以打开截图文件看下,验证中文是否能够正常显示

rockswang
1.4k 声望154 粉丝

To play is Human