前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用docker部署puppeteer

利用docker部署puppeteer

作者头像
2014v
发布2019-11-20 11:39:06
3.1K0
发布2019-11-20 11:39:06
举报
文章被收录于专栏:2014前端笔记2014前端笔记

记录一下这次用docker遇到的一些问题

先提供一个我用的包含puppeteer的docker镜像

puppeteer可以使用Network.emulateNetworkConditions和Emulation.setCPUThrottlingRate轻松地模拟不同的网络请求。但是,这一个CPU节流器只是相对延缓你的CPU,在不同的机器我们会得到不同的结果,所以我们必须要统一一个环境来运行我们的程序。

于是docker出现在了我的视野中。记录一下docker的常用命令

代码语言:javascript
复制
docker info
docker run -v /host/path:/container/path -v /path:/path -dit z2014/detector_docker:0.1 /bin/bash
docker ps
docker stop id
docker rm id
docker build -f Dockerfile -t detector_docker:0.2  .

在这里,我主要是利用puppeteer执行一段脚本,然后再从docker容器中,向宿主机post结果回去。

代码语言:javascript
复制
docker run --net=host

--net=host参数可以让容器共享主机的netowrk,但是仅仅限于linux

在windows和imac上这样是无效的,在docker18.03以上的版本,内置了这样的一个特殊的域名来解决这个问题 host.docker.internal

利用trace.json获取到页面不同时间段的屏幕截图
代码语言:javascript
复制
const puppeteer = require('puppeteer');
const fs = require('fs');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.tracing.start({ screenshots: true, path: 'trace.json' });
  await page.goto('https://www.google.com', { timeout: 60000 });
  await page.tracing.stop();

  // --- extracting data from trace.json ---
  const tracing = JSON.parse(fs.readFileSync('./trace.json', 'utf8'));
  const traceScreenshots = tracing.traceEvents.filter(x => (
      x.cat === 'disabled-by-default-devtools.screenshot' &&
      x.name === 'Screenshot' &&
      typeof x.args !== 'undefined' &&
      typeof x.args.snapshot !== 'undefined'
  ));
  traceScreenshots.forEach(function(snap, index) {
    fs.writeFile('trace-screenshot-'+index+'.png', snap.args.snapshot, 'base64', function(err) {
      if (err) {
        console.log('writeFile error', err);
      }
    });
  });
  // --- end extracting data from trace.json ---

  await page.close();
})();

数组中的对象有一个ts属性,ts/1000 - navigationStart算出当前加载时间

下面是关于本次踩坑查到的一些资料

关于puppeteer

网站性能测试利器:Puppeteer trace.json如何使用 trace.json另一个issue

关于docker

stackoverflow名称切换

案例

官方更新历史

官方名称更换历史

配置

问题1

代码语言:javascript
复制
libX11.so.6: cannot open shared object file: No such file or directory

在centos上安装puppeteer时,会有一些基本库安装不上,尝试使用如下命令安装

代码语言:javascript
复制
yum -y install libX11 libXcomposite libXcursor libXdamage libXext libXi libXtst cups-libs libXScrnSaver libXrandr alsa-lib pango atk at-spi2-atk gtk3

问题2

下载的chromium引用路径事例

代码语言:javascript
复制
const puppeteer = require('puppeteer');

const start = async () => {

    const browser = await puppeteer.launch({
        executablePath: "/Users/a2014/Desktop/puppeteer-demo/chrome-mac/Chromium.app/Contents/MacOS/Chromium",
    });

    const page = await browser.newPage();

    await page.goto('https://www.baidu.com');

    await  page.screenshot({
        path:'baidu.png'
    });
    await page.close();
    await browser.close();
}

start();
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 记录一下这次用docker遇到的一些问题
    • 利用trace.json获取到页面不同时间段的屏幕截图
    • 关于puppeteer
    • 关于docker
    • 问题1
    • 问题2
    相关产品与服务
    容器镜像服务
    容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档