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('


