headless browser(无头浏览器):
是一种在无界面的环境中运行浏览器,与正常浏览器的区别
直接通过命令行或者程序语言操作没有界面,少了加载 css/js、渲染页面的工作,比真实浏览器更快,更稳定
Puppeteer: 是 Chrome 开发团队在 2017 年发布的一个 Node.js 包,用来模拟 Chrome 浏览器的运行
Selenium: 2004年就发布了,支持多种浏览器,多编程语言
Puppeteer & Selenium 对比
功能:网页截图或者生成 PDF爬取 SPA 或 SSR 网站UI 自动化测试,模拟表单提交,键盘输入,点击等行为捕获网站的时间线,帮助诊断性能问题创建一个最新的自动化测试环境,使用最新的 js 和最新的 Chrome 浏览器运行测试用例测试 Chrome 扩展程序 实例:
截图 或 生成PDF。
const puppeteer = require('puppeteer');(async () => { // 生成browser实例 const browser = await puppeteer.launch(); // 调出界面配置 // const browserConfig = { // headless: false // }; // const browser = await puppeteer.launch(browserConfig); // 解析一个新的页面。页面是在默认浏览器上下文创建的 const page = await browser.newPage(); await page.setViewport({ width: 1000, height: 500 }); await page.goto('https://www.jianshu.com/p/c269277ca2d4'); // 生成图片 await page.screenshot({ path: 'images/example.png' }); // 生成pdf await page.pdf({ path: 'page.pdf' }); // 截全屏 await page.screenshot({ path: 'images/homepage.png', fullPage: true }) // 截取对应选择器部分 await page.goto('https://www.baidu.com'); let clip = await page.evaluate(() => { let { x, y, width, height } = document.getElementById('form').getBoundingClientRect(); return { x, y, width, height }; }); await page.screenshot({ path: 'images/baidu.png', clip: clip //设置clip 属性 }); await browser.close();})();
生成页面 或 爬虫
// 生成页面const Koa = require('koa');const fs = require('fs');const puppeteer = require('puppeteer');const app = new Koa();const baseUrl = 'http://www.baidu.com';//这里是真实SPA页面的地址app.use(async (ctx, next) => { let browser = await puppeteer.launch({ dumpio: true, args: ['--no-sandbox', '--disable-setuid-sandbox'], timeout: 10000 }); const page = await browser.newPage(); try { let myUrl = baseUrl + ctx.url; await page.goto(myUrl); //到指定页面的网址. await page.waitFor(5000); } catch (err) { await page.close(); await browser.disconnect(); console.log('出现错误:' + err); // 这里捕捉到错误 `error` } let html = await page.content() ctx.type = "text/html;charset=utf-8"; ctx.body = html.replace('