作用与依赖安装
Puppeteer是一个由Google Chrome团队开发的Node.js库,它提供了一个高级API,可以控制Chrome或Chromium浏览器的操作,实现类似于人类对浏览器的操作,比如打开网页、输入文字、点击按钮等等。使用Puppeteer可以方便地进行自动化测试、爬虫、网页截图等操作。
-
网页截图或者生成 PDF
-
爬取 SPA 或 SSR 网站
-
UI 自动化测试,模拟表单提交,键盘输入,点击等行为
-
捕获网站的 timeline trace,用来帮助分析性能问题。
-
创建一个最新的自动化测试环境,使用最新的 js 和最新的 Chrome 浏览器运行测试用例
-
测试 Chrome 扩展程序
依赖安装
当你安装 Puppeteer 时,它会下载最新版本的Chromium(~170MB Mac,~282MB Linux,~280MB Win),以保证可以使用 API。
pnpm add puppeteer
用法与API介绍
初识Puppeteer - 手把手教学 - 掘金 (juejin.cn)
创建一个浏览器实例
// { headless: 'new' } 是最新的无头模式启用方式,原本方式为 { headless: true }
const browser = await puppeteer.launch({ headless: 'new' })
// const browser = await puppeteer.launch({ headless: true })
什么是无头模式?
在无界面的环境中运行 Chrome
创建一个标签页实例
const page = await browser.newPage()
使用拦截器
// 启用请求拦截
await page.setRequestInterception(true)
page.on('request', interceptedRequest => {
// if (
// interceptedRequest.url().endsWith('.png') ||
// interceptedRequest.url().endsWith('.jpg')
// )
// interceptedRequest.abort()
// else interceptedRequest.continue()
// 2. 忽略不必要的请求,如图片,视频样式等等
const whitelist = ['document', 'script', 'xhr', 'fetch']
if (!whitelist.includes(interceptedRequest.resourceType())) {
// 中断请求
return interceptedRequest.abort()
}
// 3. 其它请求正常继续
interceptedRequest.continue()
})
打开指定url并获取响应内容
const url = 'https://item.jd.com/100058934613.html'
const response = await page.goto(url, {
timeout: 30 * 1000,
waitUntil: 'networkidle2',
})
const text = await response.text()
waitUntil <string|Array> 满足什么条件认为页面跳转完成,默认是 load 事件触发时。指定事件数组,那么所有事件触发后才认为是跳转完成。事件包括
- load - 页面的load事件触发时
- domcontentloaded - 页面的 DOMContentLoaded 事件触发时
- networkidle0 - 至少500毫秒内,不再有网络连接时触发(与timeout参数搭配使用)
- networkidle2 - 至少500毫秒内,网络连接数不超过2个(与timeout参数搭配使用)
关闭浏览器
browser.close()
参考文章
puppeteer 截图,pdf,宽度不完整,缺失,处理方式
初识Puppeteer - 手把手教学 - 掘金 (juejin.cn)
Nodejs 之 Puppeteer 通用 SSR 方案 - 掘金 (juejin.cn)
vue.js - 基于Vue SEO的四种方案 - 冷子欲的前端 - SegmentFault 思否
GitHub - puppeteer/puppeteer: Node.js API for Chrome
Puppeteer Guides | Puppeteer (pptr.dev)
puppeteer/examples at main · puppeteer/puppeteer · GitHub
API Reference | Puppeteer (pptr.dev)
Koa 中返回 html 文件引发的思考 - 掘金 (juejin.cn)
网站如何判断是爬虫用户访问的呢? - 知乎 (zhihu.com)
javascript - Puppeteer 无法获取完整的源代码
puppeteer-不需重构,无痛加强vue单页面应用的SEO,提升百度收录排名