美文网首页
初识 Puppeteer

初识 Puppeteer

作者: 时间小鱼 | 来源:发表于2018-05-02 14:27 被阅读0次

    什么是 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();
                }
            });
        })
    })();
    

    相关文章

      网友评论

          本文标题:初识 Puppeteer

          本文链接:https://www.haomeiwen.com/subject/lyhcrftx.html