初识 Puppeteer

什么是 Puppeteer

Puppeteer 是一个基于 Chrome Devtools 协议,Puppeteer 可以让用户界面测试变得很轻松。

安装

当你安装 Puppeteer 时,会下载一个最新版本的 ChromiumPuppeteer 依赖于 Node v6.4.0 及以上版本,推荐安装 7.6 版本以上的 Node

npm i puppeteer

或者

yarn add puppeteer

Demo

  • 截屏

保存名为 example.js 的文件

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.baidu.com');
  await page.screenshot({path: 'baidu.png'});

  await browser.close();
})();

在命令行中运行

node example.js

Puppeteer 默认截屏大小为 800 * 600。这个大小可以通过 Page.setViewport() 方法自定义。

  • PDF
const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://www.baidu.com', {
        waitUntil: 'networkidle2'
    });
    await page.pdf({
        path: 'hn.pdf',
        format: 'A4'
    });
    await browser.close();
})();
  • 获取页面信息
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.baidu.com');

  // Get the "viewport" of the page, as reported by the page.
  const dimensions = await page.evaluate(() => {
    return {
      width: document.documentElement.clientWidth,
      height: document.documentElement.clientHeight,
      deviceScaleFactor: window.devicePixelRatio
    };
  });

  console.log('Dimensions:', dimensions);

  await browser.close();
})();

常用 API

  • setViewport 常用参数
{
    width: 1024,
    height: 3000,
    isMobile: false,    // 是否启用移动设备模式
}
  • screenshot 常用参数
{
    fullPage: true, // 是否截取整个页面
    path: 'image',  // 文件名,也可以写成 image.png
    type: 'png',    // 仅支持 png 和 jpeg
    omitBackground: true    // 是否支持透明度
}
  • pdf 常用参数

headless: false 不支持 pdf

{
    path: '1.pdf',
    scale: 1,   // 缩放比例
    printBackground: true,  // 是否打印背景色
    landscape: false,   // 是否横向打印
    formart: 'A4'
}

调试运行

  • 关掉无界面模式

headless 可以启动浏览器查看模式

const browser = await puppeteer.launch({
    headless: false
});
  • 减慢速度

slowMo 属性可以帮助你看清发生了什么。单位为 ms

const browser = await puppeteer.launch({
    slowMo: 250
});

实践应用

我们可以通过使用 Puppeteer 来自动化测试网页,从而解放双手。

const puppeteer = require('puppeteer');

(async()=>{
    const browser = await puppeteer.launch({
        headless: false
    });
    const page = await browser.newPage();
    const mouse = await page.mouse;
    await page.goto('https://www.baidu.com/');
    await page.type('#txtUserName', 'sa', {
        delay: 250
    });
    await page.tap('#btnLoginNew');
    await page.waitFor(2000);
    await page.evaluate(()=>{
        let array = Array.from(window.frames[2].document.querySelectorAll('li'));
        array.map(item=>{
            if(item.innerText==='智能排班'){
                item.onclick();
            }
        });
    })
})();
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.puppeteer简介 puppeteer是一个node库,是Google chrome团队官方的无界面(he...
    伊人风采_690d阅读 7,692评论 0 11
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一种新的协议。它实...
    香橙柚子阅读 24,065评论 8 183
  • 进入大学,第一要务肯定要好好学习。拿起红色本子,红色笔。记录丰厚的知识。 大学时光荏苒,穿上红彤彤的鞋子。奔跑吧,...
    novelmascot阅读 343评论 0 2
  • 跨年 回想跨年烟花,自从孩子出生后,已经有好几年没有跟家人一起去看了。今年发现了一个很好的看烟花地点,以后都可以带...
    Felix波阅读 146评论 0 1
  • 2012年3月29日成立于安康市汉滨高中。 好吧。需要说明的是,这是一个文学性的社团。 就像你所知道的文学社一样,...
    墨子鱼阅读 622评论 0 1