目的:为了防止纠纷,客户投诉的时候无法追溯当时商品参与的活动,所以需要交易快照。

实现逻辑主要是借助Google的无图形界面的headless Chrome之后来实现,屏幕的截屏操作。

1. 包

我们通过composer的包来实现

spatie/browsershot

具体用法 看文档 https://packagist.org/packages/spatie/browsershot

2. 安装nodejs

官网下载然后安装

3. 安装puppeteer

npm install puppeteer  //有可能无法安装

上面无法安装切换淘宝的源。

npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install puppeteer

这边可以一般可以安装成功,但是还有问题,可能会导致无法启动。

..node_modules/puppeteer/.local-chromium/linux-496140/chrome-linux/chrome: error while loading shared libraries: libpangocairo-1.0.so.0: cannot open shared object file: No such file or directory 

这是软件虽然安装了,但是依赖没有安装。

#依赖库
yum install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64 atk.x86_64 gtk3.x86_64 -y

#字体
yum install ipa-gothic-fonts xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-utils xorg-x11-fonts-cyrillic xorg-x11-fonts-Type1 xorg-x11-fonts-misc -y

我安装完之后,还是会有乱码。。

乱码解决方案

yum -y groupinstall "X Window System"
yum -y groupinstall chinese-support 
yum -y groupinstall Fonts  

4. 截屏

发起操作的时候可能会提示你无法执行,修改vendor包里面的browser.js,增加参数

if (!browser) {
        browser = await puppeteer.launch({
            ignoreHTTPSErrors: request.options.ignoreHttpsErrors,
            executablePath: request.options.executablePath,
            // args: request.options.args || ["--no-sandbox"]
            args: ["--no-sandbox"]  //增加参数
        });
    }