在wsl中部署puppeteer的相关笔记
一. 环境
WSL2:Ubuntu 22.04
NVM:0.39.7
Node.js:18.20.3
Npm:10.7.0
Puppeteer:22.12.1
二. 安装Node.js环境
习惯使用NVM管理Node版本,先来安装NVM(官网):
- 下载并解压
cd $HOME
mkdir -p .nvm
cd .nvm
wget https://github.com/nvm-sh/nvm/archive/refs/tags/v0.39.7.tar.gz
tar -zxvf v0.39.7.tar.gz
2. 配置环境
在~/.bashrc的末尾,添加如下语句:
export NVM_DIR="$HOME/.nvm/nvm-0.39.7"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
3. 使能配置
source ~/.bashrc
4. 安装Node.js版本
nvm install 18 --lts
--lts
表示该大版本的最新稳定版
5. 查看当前已安装的Node.js版本列表:
nvm ls
三. puppeteer的应用
const pageOpts = {
width: 1366,
height: 800,
deviceScaleFactor: 1,
};
const screenshotOpts = {
type: "png",
path: "thum.png",
fullPage: true,
};
const url = "https://www.itez.com.cn";
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setViewport(pageOpts);
await page.goto(url, { waitUntil: "networkidle2" });
await page.screenshot(screenshotOpts);
四. 缺少依赖问题
反复提示缺少各种依赖,到处搜刮一顿操作之后是没问题了,但也不知道哪些是无所谓的。
- Debian发行版:
apt install -y gconf-service libc6 libcairo2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libstdc++6 libx11-6
apt install -y libx11-xcb1 libxcb1 libxcursor1 libxext6 libxi6 libxrender1 libxtst6 ca-certificates fonts-liberation libappindicator1 lsb-release xdg-utils
apt install -y libnspr4 libdrm2 libxkbcommon0 libgbm1 libpango-1.0-0 libpangocairo-1.0-0 libxshmfence1
apt install -y libgtk-3-dev libnotify-dev libgconf-2-4 libxss1
apt install -y libnss3
apt install -y libatk1.0-0
apt install -y libatk-bridge2.0-0
apt install -y libcups2
apt install -y libxcomposite1
apt install -y libxdamage1
apt install -y libxfixes3
apt install -y libxrandr2
apt install -y libasound2
2. Redhat发行版如CentOS:
yum install atk at-spi2-atk libdrm libXcomposite libXdamage libXrandr libX11 libXcursor libXext libXi libXtst cups-libs libXScrnSaver alsa-lib
五. 安全沙箱问题
错误信息:
Error: Failed to launch the browser process! undefined
[16644:16644:0705/112140.109819:ERROR:zygote_host_impl_linux.cc(99)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
解决办法:
- 使用 --no-sandbox 选项
const browser = await puppeteer.launch({
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
- 以非 root 用户运行
- 在 Docker 容器内运行
六. 中文乱码问题
由于Linux对中文支持不好,需要手动安装中文字体,否则截图之后会发现中文部分全是小方框。
可安装文泉驿字体。
文泉驿是一个以开发开源、免费中文电子资源--如汉字字体、词库等--为目标的公益性组织。她的创办宗旨是实现“任何人在任何地方都可以自由使用汉字和汉语进行交流”。
- 查找字体
# Debian
apt search wqy
# Redhat
yum search wqy
2. 安装字体
apt install fonts-wqy-microhei -y
apt install fonts-wqy-zenhei -y
apt install xfonts-wqy -y
七. 有用的资源
在查找问题过程中发现的一些宝藏资源,标记一下。
Ubuntu服务器安装puppeteer
ubuntu系统安装Puppeteer
Linux安装部署Puppeteer踩坑
版权声明: 本文为博主 网无忌 原创文章,欢迎转载,但请务必标注原文链接。