Puppeteer
是一个基于 Chrome Devtools
协议,Puppeteer
可让用户界面测试变得很轻松。node
当你安装
Puppeteer
时,会下载一个最新版本的Chromium
。Puppeteer
依赖于 Node v6.4.0 及以上版本,推荐安装 7.6 版本以上的Node
。npm
npm i puppeteer
复制代码
或者浏览器
yarn add puppeteer
复制代码
保存名为 example.js
的文件less
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();
})();
复制代码
在命令行中运行async
node example.js
复制代码
Puppeteer
默认截屏大小为 800 * 600。这个大小能够经过 Page.setViewport()
方法自定义。测试
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();
})();
复制代码
setViewport
经常使用参数{
width: 1024,
height: 3000,
isMobile: false, // 是否启用移动设备模式
}
复制代码
screenshot
经常使用参数{
fullPage: true, // 是否截取整个页面
path: 'image', // 文件名,也能够写成 image.png
type: 'png', // 仅支持 png 和 jpeg
omitBackground: true // 是否支持透明度
}
复制代码
pdf
经常使用参数
headless: false
不支持
{
path: '1.pdf',
scale: 1, // 缩放比例
printBackground: true, // 是否打印背景色
landscape: false, // 是否横向打印
formart: 'A4'
}
复制代码
headless
能够启动浏览器查看模式lua
const browser = await puppeteer.launch({
headless: false
});
复制代码
slowMo
属性能够帮助你看清发生了什么。单位为 ms
。spa
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', { // 输入 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==='XXX'){
item.onclick();
}
});
})
})();
复制代码