当前位置: 首页 > news >正文

Lighthouse组合Puppeteer检测页面

如上一篇文章lighthouse的介绍和基本使用方法结尾提到的一样,我们在实际使用Lighthouse检测页面性能时,通常需要一定的业务前置条件,比如最常见的登录操作、如果没有登录态就没有办法访问其他页面。再比如有一些页面是需要进行一系列的操作,点击某些按钮,调用某些接口完成一些业务之后才能打开某个页面。

Puppeteer

Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。

可以做什么

我们在在浏览器中手动执行的绝大多数操作都可以使用 Puppeteer 来完成! 下面是一些示例:

  • 生成页面 PDF。
  • 抓取 SPA(单页应用)并生成预渲染内容(即“SSR”(服务器端渲染))。
  • 自动提交表单,进行 UI 测试,键盘输入等。
  • 创建一个时时更新的自动化测试环境。 使用最新的 JavaScript 和浏览器功能直接在最新版本的Chrome中执行测试。
  • 捕获网站的 timeline trace,用来帮助分析性能问题。
  • 测试浏览器扩展。

所以我们可以利用Puppeteer先来模拟用户进行一系列的业务操作之后在进行目标页面的检测。

示例

我们以检测爱奇艺的个人账户中心设置为例,检测页面:用户设置页,该页面会根据用户的不同加载该用户过去一段时间的观看记录列表。自然也就需要先登录才能正常的访问该页面了。

整体流程

整体流程如下:

在这里插入图片描述

Puppeteer启动浏览器

由上图我们先试用Puppeteer来启动一个浏览器,可以设置为无头模式,在开发的时候我们可以设置为有头模式,这样可以观察到整个程序的操作流程,为了避免缓存的影响,我们使用无痕模式来进行测试。启动浏览器的代码如下所示
在这里插入图片描述
其中有个参数叫做slowMo这个参数传入了100,是为了puppeteer在执行时速度变慢,这样比较便于我们观察整个程序的执行。
Puppeteer中的launch里面有一些参数,在代码注释中也说明可,也可一参考Puppeteer-中文文档

其中有一个函数getExecutablePath是为了兼容mac和window中chrome的路径不同,其代码如下:
在这里插入图片描述

Puppeteer模拟登录

浏览器打开之后,我们就需要在首页中使用puppeteer进行模拟登录了。此时可以观察到在爱奇艺的首页登录按钮是在右上角在这里插入图片描述
点击登录按钮之后会有一个弹框,在弹框中我们需要先切换到密码登录的选项,然后输入账号密码,以及勾选底部的【同意】协议之后就可以点击登录按钮进行登录了。
在这里插入图片描述
梳理一下此时的操作为

  1. 打开爱奇艺首页
  2. 点击右上角登录按钮
  3. 在弹框将登录模式切换为密码登录模式
  4. 输入手机号和密码
  5. 勾选底部协议单选按钮
  6. 点击登录按钮
  7. 等待登录成功

那我们把这一段操作使用Puppeteer写成对应的脚本:
在这里插入图片描述

审计用户设置页

在上面使用Puppeteer登录成功之后,同源策略,我们就可以使用Lighthouse再开启一个浏览器tab来对用户设置页进行性能的审计了。
在这里插入图片描述
可以简单看一下lighthouse的源码部分
在这里插入图片描述

这里有一些参数的设置说明一下。
lighthouse一共接受四个参数

  1. url: 审计目标页面的URL
  2. flags:可选的配置项
    • port:浏览器运行的端口port,
    • output:最终输出的报告形式有三种分别是 html,json和csv
    • logLevel:日志级别
    • onlyCategories:审计的类别,这里只审计性能类,会快很多
    • locale:生成报告的语言,需要node 14+的版本才支持,在14版本之前都是默认为英文的
  3. configJSON:也是配置,基本和flags类似,在后面我们自定义gatherers和audits的时候就需要使用这个参数
  4. userConnection:没用过,使用默认即可,看源码应该是一个用户和浏览器建立链接的一个实例,如果没有就会自己实例化一个ChromeProtocol来与浏览器建立链接

生成报告

最终审计出来之后根据传入的output的数组值来生成一个报告列表。这里传入的是 output: [‘html’, ‘json’],那最终也会生成这两类报告结果,我们使用Node的fs模块,将报告输出至项目的report目录下,同时为了避免多次测试产生的文件名一直,使用一下uuid来做个区分
在这里插入图片描述

入口函数

以上分析了每个功能部分的函数,现在看下整体的入口函数如下:
在这里插入图片描述
整个代码结构如上所示,运行结束之后不管成功与否都会在finally中将浏览器给关闭。

效果展示

在这里插入图片描述

参考文件

Puppeteer中文网
云音乐性能测试内幕
政采云

相关文章:

Lighthouse组合Puppeteer检测页面

如上一篇文章lighthouse的介绍和基本使用方法结尾提到的一样,我们在实际使用Lighthouse检测页面性能时,通常需要一定的业务前置条件,比如最常见的登录操作、如果没有登录态就没有办法访问其他页面。再比如有一些页面是需要进行一系列的操作&a…...

【C++】仿函数、lambda表达式、包装器

1.仿函数 仿函数是什么?仿函数就是类中的成员函数,这个成员函数可以让对象模仿函数调用的行为。 函数调用的行为:函数名(函数参数)C中可以让类实现:函数名(函数参数)调用函数 自己写一个仿函数: 重载()运算符 cla…...

二叉树(二)

二叉树——堆存储1.堆的初始化2. 堆的销毁3.堆的插入4.堆的删除5.堆的打印6.取堆顶的数据7.堆的数据个数8.堆的判空9.堆的构建10.向上调整11.向下调整12.使用堆进行排序13.交换14.完整代码🌟🌟hello,各位读者大大们你们好呀🌟&…...

爬虫知识简介

爬虫简介 爬虫与网络请求 ​ 网络爬虫是一个自动提取网页的程序,一般都分为3步:数据爬取,数据解析,数据存储。数据爬取就是模拟浏览器发送请求,所以需要对网络请求HTTP/HTTPS有一定了解 相关概念: ​ H…...

2023年全国最新会计专业技术资格精选真题及答案6

百分百题库提供会计专业技术资格考试试题、会计考试预测题、会计专业技术资格考试真题、会计证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 11.下列各项中,企业根据本月“工资费用分配汇总表”分配所列财务部门…...

同时学习C++语言和C#语言好吗?

同时学习两门编程语言并不是不好的选择,尤其是对于初学者而言,这样做能够帮助你更好地理解编程语言的基本概念和原则。C和C#都是常用的编程语言,它们都有各自的优点和用途。同时学习这两门语言能够让你更好地理解它们之间的异同点&#xff0c…...

Android8,source与lunch流程解析

source 流程 # build/make/envsetup.sh ---- # Execute the contents of any vendorsetup.sh files we can find. for f in test -d device && find -L device -maxdepth 4 -name vendorsetup.sh 2> /dev/null | sort \ test -d vendor && find -L vendo…...

大数据NiFi(二十):实时同步MySQL数据到Hive

文章目录 实时同步MySQL数据到Hive 一、开启MySQL的binlog日志 1、登录mysql查看MySQL是否开启binlog日志 2 、开启mysql binlog日志 3、重启mysql 服务,重新查看binlog日志情况 二、​​​​​​​​​​​​​​配置“CaptureChangeMySQL”处理器 1、创建“…...

mac 如何设置 oh my zsh 终端terminal 和添加主题powerlevel10k

Oh My Zsh 是什么 Oh My Zsh 是一款社区驱动的命令行工具,正如它的主页上说的,Oh My Zsh 是一种生活方式。它基于 zsh 命令行,提供了主题配置,插件机制,已经内置的便捷操作。给我们一种全新的方式使用命令行。 **Oh …...

王道《操作系统》学习(一)——计算机系统概述

1.1 操作系统的概念、功能 1.1.1 操作系统的概念(定义) (1)操作系统是系统资源的管理者 (2)向上层用户、软件提供方便易用的服务 (3)是最接近硬件的一层软件 1.1.2 操作系统的功能…...

什么是自适应平台服务?

总目录链接==>> AutoSAR入门和实战系列总目录 文章目录 什么是自适应平台服务?1.1 自适应平台服务包含哪些功能簇呢?1.1.1 ara::sm 状态管理 (SM)1.1.2 ara::diag 诊断管理 (DM)1.1.3 ara::s2s 信号到服务映射1.1.4 ara::nm 网络管理 (NM)1.1.5 ara::ucm 更新和配置管…...

QML Image and Text(图像和文字)

Image(图片) 图像类型显示图像。 格式: Image {source: "资源地址" } source:指定资源的地址 自动检测文件拓展名:source中的URL 指示不存在的本地文件或资源,则 Image 元素会尝试自动检测文件…...

图解LeetCode——剑指 Offer 25. 合并两个排序的链表

一、题目 输入两个递增排序的链表&#xff0c;合并这两个链表并使新链表中的节点仍然是递增排序的。 二、示例 2.1> 示例1&#xff1a; 【输入】1->2->4, 1->3->4 【输出】1->1->2->3->4->4 限制&#xff1a; 0 < 链表长度 < 1000 三、…...

2023年全国最新安全员精选真题及答案7

百分百题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 11.&#xff08;单选题&#xff09;进入盾构机土仓进行维修工作时&#xff0c;需经&am…...

TypeScript笔记-进行中

学习来源&#xff1a; 本笔记由尚硅谷教学视频整理而来 文章目录学习来源&#xff1a;一.TS简介TypeScript是什么TypeScript增加了什么二环境搭建安装nvm环境搭建二.TypeScript中的基本类型类型声明类型类型示例代码三.编译配置自动编译文件自动编译整个项目四.使用webpack打包…...

阅读HAL源码之重点总结

HAL库的封装特点 HAL封装中有如下特点&#xff08;自己总结的&#xff09;&#xff1a; 特定外设要设置的参数组成一个结构体&#xff1b; 特定外设所有寄存器组成一个结构体&#xff1b; 地址基本都是通过宏来定义的&#xff0c;定义了各外设的起始地址&#xff0c;也就是对应…...

常见的http请求响应的状态码

常见的http请求响应的状态码 一些常见的状态码为&#xff1a; 200 – 服务器成功返回网页 404 – 请求的网页不存在 503 – 服务不可用 1xx&#xff08;临时响应&#xff09; 表示临时响应并需要请求者继续执行操作的状态代码。 代码 说明 100 &#xff08;继续&#xff09…...

UML类图中的类图、接口图、关联、聚合、依赖、组合概念的解释

文章目录UML类图依赖和关联的主要区别UML类图 类&#xff1a;类有三层结构 第一层&#xff1a;类的名字第二层&#xff1a;类的属性第三层&#xff1a;类的方法 接口&#xff1a;接口跟类相似&#xff0c;不过多了一个<<interface>>来表示它是一个接口 第一层&a…...

【数据库】第九章 关系查询处理与优化

第九章 关系查询处理与优化 索引 索引文件是一种辅助存储结构&#xff0c;其存在与否不改变存储表的物理存储结 构&#xff1b;然而其存在&#xff0c;可以明显提高存储表的访问速度。 索引文件组织方式有两种&#xff1a;(相对照的&#xff0c;主文件组织有堆文件、排序文件、…...

大学物理期末大题专题训练总结-磁学大题

&#xff08;事先声明指的是简单的那个磁学大题&#xff0c;另外一类涉及储存的磁能、磁感应强度分布下次说&#xff09;求个磁通量&#xff0c;求个感应电动势&#xff0c;求个安培力大小......这个感觉是不是像你梦回高中&#xff1f;当然&#xff0c;这一块大题跟高中磁学部…...

聚类算法(上):8个常见的无监督聚类方法介绍和比较

无监督聚类方法的评价指标必须依赖于数据和聚类结果的内在属性&#xff0c;例如聚类的紧凑性和分离性&#xff0c;与外部知识的一致性&#xff0c;以及同一算法不同运行结果的稳定性。 本文将全面概述Scikit-Learn库中用于的聚类技术以及各种评估方法。 本文将分为2个部分&…...

华为OD机试真题Python实现【找到它】真题+解题思路+代码(20222023)

找到它 题目 找到它是个小游戏,你需要在一个矩阵中找到给定的单词 假设给定单词HELLOWORLD,在矩阵中只要能找HELLOWORLD就算通过 注意区分英文字母大小写,并且你只能上下左右行走 不能走回头路 🔥🔥🔥🔥🔥👉👉👉👉👉👉 华为OD机试(Python)真题目…...

English Learning - L2 语音作业打卡 Day4 2023.2.24 周五

English Learning - L2 语音作业打卡 Day4 2023.2.24 周五&#x1f48c; 发音小贴士&#xff1a;&#x1f48c; 当日目标音发音规则/技巧&#xff1a;&#x1f36d; Part 1【热身练习】&#x1f36d; Part2【练习内容】&#x1f36d;【练习感受】&#x1f353;元音 [u:]&#x…...

C#:Krypton控件使用方法详解(第九讲) ——kryptonRadioButton

今天介绍的Krypton控件中的kryptonRadioButton&#xff0c;这是一个单选按钮控件。下面开始介绍这个控件的属性&#xff1a;首先介绍的是外观属性&#xff0c;如下图所示&#xff1a;Cheacked属性&#xff1a;表示设置kryptonRadioButton控件的初始选中状态是什么样的&#xff…...

消失的数字(每日一题)

目录 一、题目描述 二、题目分析 2.1 方法一 2.1.1 思路 2.1.2 代码 2.2 方法二 2.2.1 思路 2.2.2 代码 2.3 方法三 2.3.1 思路 2.3.2 代码 三、完整代码 一、题目描述 oj链接&#xff1a;https://leetcode.cn/problems/missing-number-lcci 数组nums包含从0到n的…...

TypeScript算法基础——TS字符串的常用操作总结:substring、indexOf、slice、replace等

字符串的操作是算法题当中经常碰见的一类题目&#xff0c;主要考察对string类型的处理和运用。 在处理字符串的时候&#xff0c;我们经常会碰到求字符串长度、匹配子字符串、替换字符串内容、连接字符串、提取字符串字符等操作&#xff0c;那么调用一些简单好用的api可以让工作…...

Leetcode100-两数之和

参见官方题解 一、学到的知识 正面寻找两个数之和相加等于某个数&#xff0c;如 ab c&#xff0c;不如反过来寻找 a c - b 正面寻找需要两层 for 循环&#xff0c;把每个数都进行遍历&#xff0c;所以时间复杂度较高 反过来则可以通过维护一个 a 的集合&#xff0c;每次通过…...

4565: 删除中间的*

描述规定输入的字符串中只包含字母和*号&#xff0c;除了字符串前导和尾部的*号之外,将串中其他*号全部删除输入输入数据包括一串字符串&#xff0c;只包含字母和*&#xff0c;总长度不超过80。输出输出删除中间*后的字符串。样例输入*******A*BC*DEF*G****样例输出*******ABCD…...

VUE组件示例说明

<!-- * Author: xxx.xx * Date: 2021-07-20 14:33:41 * LastEditors: xxx.xx * LastEditTime: 2021-07-20 18:22:37 * PageTitle: 上拉加载组件 * Description: 描述... * FilePath: /wxapp-view/components/loadmore.vue --> <template><view class"c-mor…...

Widget中的State-学习笔记

Widget 有 StatelessWidget 和 StatefulWidget 两种类型。StatefulWidget 应对有交互、需要动态变化视觉效果的场景&#xff0c;而 StatelessWidget 则用于处理静态的、无状态的视图展示。StatefulWidget 的场景已经完全覆盖了 StatelessWidget&#xff0c;因此我们在构建界面时…...