puppeteer 配置
puppeteer安装指南会安装2个库
- puppeteer:自动下载chromium,然后使用puppeteer-core驱动,可以通过环境变量配置
- puppeteer-core:核心库并不下载chromium,通过api接口调用
本地安装和测试没有问题启动参数指定自管chrome
const puppeteer = require('puppeteer-core');
(async () => {
const browser = await puppeteer.launch({
executablePath: 'C:\\Users\\ASUS\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe',
headless:false})
const page = await browser.newPage();
await page.goto('https://bing.com');
await page.screenshot({path: 'example.png'});
await browser.close();
})();
在aws ec2上运行测试脚本报错:
Error: Failed to launch the browser process!
/home/ec2-user/.cache/puppeteer/chrome/linux-1045629/chrome-linux/chrome: error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory
理论上安装puppeteer之后不跳过download chromium会自动下载chromium到/home/ec2-user/.cache/puppeteer/chrome/linux-1045629/chrome-linux/chrome
,只需要安装依赖库即可,但是尝试无效,需要按照以下说明安装chromium,不是很理解。
查看puppeteer github issue,这是个已知问题,Running Puppeteer on AWS EC2 instance running Amazon-Linux
Now Puppeteer can launch Chromium to run your tests. If you do not enable EPEL and if you continue installing chromium as part of npm install, Puppeteer cannot launch Chromium due to unavailablity of libatk-1.0.so.0 and many more packages.
需要进行如下配置
sudo amazon-linux-extras install epel -y
sudo yum install -y chromium
指执行以下测试效果如下
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.bing.com');
await page.screenshot({path: 'example.png'});
await browser.close();
})();
访问中文网站会出现字符乱码,因为访问bing会自动跳转到cn.bing.com,访问英文网站正常
参考这里解决中文乱码,效果如下