麒麟ARM64环境部署Puppeteer相关服务
标准产品的CAP4报表等功能由于涉及很多后台算力,在进行报表打印时,均采用后端无头浏览器打印技术。
标准产品默认的后台打印使用PhantomJS技术,这种技术在信创环境支持较弱,同时随着PhantomJS不再维护,其功能在非信创环境下的兼容性也越来越差。
当项目上遇到无法使用默认的PhantomJS打印时,则需要考虑替代方案,目前市面推荐的是采用“Node+Puppeteer+Chromium”替代(后文均简称Puppeteer)。
Puppeteer: 是 Google Chrome 的 Headless 版本的一个工具,它提供了一个高级的 API 来控制 Chrome。与 PhantomJS 相比,Puppeteer 提供了更为强大的功能,并且是 Chrome 团队官方支持的项目。
文章目录
- 麒麟ARM64环境部署Puppeteer相关服务
- 目标
- Puppeteer简介
- 1.核心特性
- 2.技术优势
- 3.与其他工具的对比
- 安装步骤
- 1.制作离线包
- 1.1. 制作node离线包
- 1.2. 制作puppeteer测试(在node环境制造)
- 1.3. 制作chromium离线包
- 2.安装node
- 3.安装chromium
- 3.1. 安装chromium
- 3.2. 查看版本
- 4.截图打印测试:
- 4.1 chromium测试:
- 4.2 node js打印测试:
目标
麒麟ARM64环境部署Puppeteer相关服务
本文档提供详细安装部署步骤,主要讲解制作离线包、安装、测试
Puppeteer简介
Puppeteer 是一款由 Google 团队开发的 Node.js 库,通过 DevTools 协议控制 Chromium 或 Chrome 浏览器,支持以无头模式(无界面)或有头模式运行23。其核心功能是通过编程方式模拟浏览器操作(如点击、滚动、表单填写等),适用于自动化测试、数据抓取、页面渲染等场景。
1.核心特性
- 无头浏览器支持
默认以无界面模式运行,减少资源消耗,适合服务器端自动化任务。 - 动态网页处理
支持渲染 JavaScript 动态加载的页面,解决传统爬虫工具难以处理异步数据的问题。 - 多场景应用
- 自动化测试:模拟用户操作进行端到端测试(如 UI 交互、表单提交);
- 数据抓取:高效爬取单页应用(SPA)及动态生成内容;
- 页面生成:生成截图、PDF(支持自定义格式);
- 性能分析:捕获页面加载时间线,辅助性能优化。
2.技术优势
- API 丰富性:提供完整的浏览器交互接口,覆盖导航、网络请求拦截、Cookie 管理等;
- 跨平台支持:兼容 Windows、macOS、Linux 系统;
- 与现代前端技术兼容:相比传统工具(如 Selenium),对单页应用和现代 Web 框架支持更优8。
3.与其他工具的对比
Puppeteer 相较于 Selenium 的通信效率更高,且无需依赖 WebDriver,直接通过浏览器协议实现更高效的自动化操作8。此外,其原生支持 Chrome 生态,调试和功能扩展更为便捷。
安装步骤
1.制作离线包
1.1. 制作node离线包
wget https://nodejs.org/dist/v18.10.0/node-v18.10.0-linux-arm64.tar.gz
1.2. 制作puppeteer测试(在node环境制造)
mkdir -p puppeteer-test && cd puppeteer-test
npm install puppeteer@10.4.0 # 新建文件test.js
cat > test.js << EOFconst puppeteer = require("puppeteer");(async () => {const browser =await puppeteer.launch( {headless: true,executablePath:'/usr/bin/chromium-browser'});console.log(134);const page = await browser.newPage();await page.setViewport({width: 1400,height: 800,});await page.goto("https://baidu.com"); await page.screenshot({ path: "example.png" ,fullPage: true }) await browser.close();
})();
EOF
cd ..
1.3. 制作chromium离线包
cat > /etc/yum.repos.d/kylin_aarch64.repo <<EOF
[ks10-adv-os]
name = Kylin Linux Advanced Server 10 - Os
baseurl = http://update.cs2c.com.cn:8080/NS/V10/V10SP1/os/adv/lic/base/aarch64/
gpgcheck = 0
enabled = 1[ks10-adv-updates]
name = Kylin Linux Advanced Server 10 - Updates
baseurl = http://update.cs2c.com.cn:8080/NS/V10/V10SP1/os/adv/lic/updates/aarch64/
gpgcheck = 0
enabled = 1[ks10-adv-addons]
name = Kylin Linux Advanced Server 10 - Addons
baseurl = http://update.cs2c.com.cn:8080/NS/V10/V10SP1/os/adv/lic/addons/aarch64/
gpgcheck = 0
enabled =1[kylinos]
name = kylinos
baseurl = http://archive2.kylinos.cn/rpm/kylin/Library/custom/kylin-server/KY10-GFB-aarch64/
enabled = 0
gpgcheck = 0
EOFyum clean all
yum makecache
mkdir -p chromium
cd chromium
yum install --enablerepo=kylinos chromium --downloadonly --downloaddir=./ -ycat > install.sh <<EOF
#!/bin/sh
# 当前目录
CURRENT_DIR=\$(cd "\$(dirname "\$0")"pwd
)rpm -hvi *.rpm --nodeps --forceecho "安装内容如下:"
for fileName in \`ls \$CURRENT_DIR | grep rpm\`
donew_fileName="\${fileName:0:\${#fileName}-4}"rpm -qa| grep \$new_fileName
done
EOFcat > uninstall.sh <<EOF
#!/bin/sh
rpm -e chromium-81.0.4044.138-2.ky10.aarch64
rpm -e chromium-common-81.0.4044.138-2.ky10.aarch64
rpm -e nss-mdns-0.14.1-3.ky10.aarch64
rpm -e minizip-devel-1.2.11-25.gfb01.ky10.aarch64
rpm -e avahi-0.7-21.ky10.aarch64
rpm -e libXScrnSaver-1.2.3-4.ky10.aarch64
rpm -e minizip-1.2.11-25.gfb01.ky10.aarch64
rpm -e u2f-hidraw-policy-1.0.2-9.ky10.aarch64
rpm -e freetype-2.10.1-1.ky10.aarch64
EOF
2.安装node
tar -zxvf node-v18.10.0-linux-arm64.tar.gz
mv node-v18.10.0-linux-arm64 /usr/local/node
/usr/local/node/bin/node -v
vim /etc/profile
#将如下内容添加到/etc/profileexport NODE_HOME=/usr/local/node
export NODE_PATH=/usr/local/node/lib/node_modules
export PATH=$PATH:$NODE_HOME/bin:$NODE_PATH
#再执行如下命令:
source /etc/profile
#查看版本:
node -v
3.安装chromium
3.1. 安装chromium
bash install.sh
3.2. 查看版本
chromium-browser -version
4.截图打印测试:
4.1 chromium测试:
执行命令(http://127.0.0.1 为可以访问的有页面的url):
/usr/bin/chromium-browser --no-sandbox --headless --disable-gpu --disable-software-rasterizer --print-to-pdf=./test.pdf http://127.0.0.1
当前目录生成test.pdf
4.2 node js打印测试:
cd puppeteer-test
node test.js
查看当前目录的example.png图片
总结文章https://open.seeyoncloud.com/v5doc/142/1185/1003.html