如何使用 Puppeteer 和 Browserless 运行自动化测试?
Puppeteer:什么是 Puppeteer 及其功能
Puppeteer 是一个 Node.js 库。使用 Puppeteer,您可以在所有基于 Chromium 的浏览器上测试您的网站,包括 Chrome、Microsoft Edge Chrome 和 Chromium。此外,Puppeteer 可用于网页抓取、自动化和测试目的。
由于 Puppeteer 只通过 DevTools 协议进行通信,因此只支持实现此协议的浏览器。因此,Safari(WebKit)、Firefox 和 IE 目前尚不支持。
什么是无头浏览器测试?
无头浏览器测试允许在不使用图形用户界面 (GUI) 的情况下自动控制网页。
这使测试人员、用户、QA 团队或开发人员能够在不手动与显示屏上看到的浏览器交互的情况下,对 Web 应用程序进行自动化测试。
本质上,无头浏览器测试的工作原理是这样的,尽管它通常是通过简单的脚本完成的。它加速了测试过程,并在开发过程中提供快速反馈。
什么是 Browserless?
Browserless 是一个功能强大的基于云的解决方案,用于无缝的浏览器自动化、网页抓取和测试。它利用 Nstbrowser 的高级指纹库进行随机指纹切换,确保不间断的数据收集和自动化。
借助其强大的云基础设施,Browserless 允许轻松访问多个浏览器实例,简化自动化任务的管理。
您对网页抓取和 Browserless 有什么奇妙的想法和疑问?
让我们看看其他开发人员在 Discord 和 Telegram 上分享了什么!
为什么 Puppeteer 比类似的测试平台更好?
- 强大的功能集: Puppeteer 提供对 Chrome 和 Chromium 浏览器的完全控制,支持页面导航、表单填写、屏幕截图、PDF 生成等自动化任务。它可以模拟浏览器中的用户操作,进行高度复杂的测试。
- 无头模式: Puppeteer 支持无头浏览器模式,这使得它在后台执行自动化任务时更加高效和轻量级,无需加载图形界面,从而提高速度和资源利用率。
- 跨浏览器支持: 除了 Chromium 之外,Puppeteer 还通过 WebDriver 协议支持跨浏览器测试,具有强大的兼容性和对多种浏览器环境的适应性。
- 社区支持和完整文档: Puppeteer 拥有一个活跃的开发人员社区和详细的文档,使开发人员能够快速上手并获得社区的支持。
- 与 Chrome 紧密集成: Puppeteer 与 Chrome/Chromium 的深度集成使其在浏览器自动化任务方面表现出色,特别是在页面性能监控和爬取准确性方面。
使用 Browserless 进行 Puppeteer 自动化测试
我们需要
- 访问 NstbrowserNstbrowser 客户端
- 然后通过 puppeteer 的自动化程序填写帐户和密码
- 最后,点击登录按钮登录
第 1 步:安装 Puppeteer。
这里我们选择更轻量级的 puppeteer-core:
pnpm install puppeteer-core
第 2 步:获取您的 API 密钥。
您可以在 Browserless 面板中找到您的 API 密钥:
第 3 步:连接到 Browserless
import puppeteer from "puppeteer-core";const token = "您的 api 密钥";const config = {proxy: '您的代理', // 必需;输入格式:schema://user:password@host:port 例如:http://user:password@localhost:8080// platform: 'windows', // 支持:windows、mac、linux// kernel: 'chromium', // 只支持:chromium// kernelMilestone: '128', // 支持:128// args: {// "--proxy-bypass-list": "detect.nstbrowser.io"// }, // 浏览器参数// fingerprint: {// userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.85 Safari/537.36', // userAgent 支持自 v0.15.0 起// },
};const query = new URLSearchParams({token: token, // 必需config: JSON.stringify(config),
});const browserWSEndpoint = `https://less.nstbrowser.io/connect?${query.toString()}`;const getBrowser = async () =>puppeteer.connect({browserWSEndpoint,defaultViewport: null,});const main = async (req, res) => {try {const browser = await getBrowser();const page = await browser.newPage();await page.goto("https://app.nstbrowser.io/login");} catch (error) {console.error(error);}
};main();
现在,我们已经成功连接 Browserless 并访问了我们的目标网站,让我们完成测试流程,并通过截取屏幕截图来验证结果。
await page.waitForSelector('input');const inputs = await page.$$('input');await inputs[0].type('18552540330@163.com', { delay: 100 });
await inputs[1].type('9KLYUWn3GmrzHPRGQl0EZ1QP3OWPFwcB', { delay: 100 });const buttons = await page.$$('button');
await buttons[1].click();await page.waitForResponse((req) => {const url = "https://api.nstbrowser.io/api/v1/passport/login";if (req.url() === url) {return true;}
});await page.screenshot({ fullPage: true, path: "./nstbrowser.png" });

我们可以看到,我们已经成功登录到 Nstbrowser 并被重定向到仪表盘,表明我们的测试已经通过。
Puppeteer 与其他平台的区别
以下是 Puppeteer 与各种其他测试平台的详细比较:
1. Puppeteer 与 WebKit/Blink:
-
Puppeteer 是一个 Node.js 库,提供高级 API 来控制无头 Chrome 或 Chromium 浏览器。
-
WebKit 和 Blink 分别是 Safari 和 Chromium 浏览器使用的布局引擎。它们负责渲染网页,而 Puppeteer 控制浏览器以执行自动化任务。
2. Puppeteer 与 Selenium:
-
Puppeteer 通过调试协议直接与 Chrome/Chromium 通信,使其与这些浏览器紧密集成。
-
Selenium 使用 Chromedriver 来管理和控制浏览器,这使其能够支持多个浏览器(例如 Firefox、Safari、Edge)。另一方面,Puppeteer 侧重于 Chrome/Chromium。
3. Puppeteer 与 PhantomJS:
-
Puppeteer 是一个现代的基于 Node.js 的库,用于控制无头 Chrome/Chromium。
-
PhantomJS 是一个基于 WebKit/Blink 的无头浏览器。但是,PhantomJS 已经过时,不再积极维护,这使得 Puppeteer 成为大多数自动化任务的更可靠和高效的选择。
4. Puppeteer 与 Nightmare.js:
-
Puppeteer 使用 Chrome DevTools 协议来控制 Chrome/Chromium,使其能够深入访问浏览器的功能。
-
Nightmare.js 是一个 JavaScript 库,使用 Electron 来渲染网页。它是为了易用性而构建的,但缺乏 Puppeteer 提供的性能和现代浏览器支持。
5. Puppeteer 与 Cypress:
-
Puppeteer 是一个 Node.js 库,用于自动化浏览器任务,如网页抓取、PDF 生成和屏幕截图捕获。
-
Cypress 是一个基于 JavaScript 的端到端测试框架,专为测试 Web 应用程序而设计。它提供了一个用户友好的界面来编写测试,并自动处理异步操作,使其成为前端测试的理想选择。
结束语
Puppeteer 是一个功能强大且奇妙的工具,可以完成 Web 测试。使用 Browserless,您可以使用 Puppeteer 完成任何自动化任务。
我希望本文能为您打开一个全新的网站测试自动化世界。像往常一样,请务必查看。
相关文章:
如何使用 Puppeteer 和 Browserless 运行自动化测试?
Puppeteer:什么是 Puppeteer 及其功能 Puppeteer 是一个 Node.js 库。使用 Puppeteer,您可以在所有基于 Chromium 的浏览器上测试您的网站,包括 Chrome、Microsoft Edge Chrome 和 Chromium。此外,Puppeteer 可用于网页抓取、自动…...
python菜鸟知识
去除空格 str 这是 含 空格 print(f去除两端空格{str.strip()}) print(f去除左端空格{str.lstrip()}) print(f去除右端空格{str.rstrip()}) print(f去除全部空格{str.replace(" ", "")}) 方法返回对象yield yield :.join([ip, port])yield {ranking…...
GPT4o,GPTo1-preview, 拼
兄弟们GPT刚开的 需要上车的扣,工作用 大家一起PIN分摊点压力。 在当今数字化的时代,程序员这一职业已经从幕后走到了前台,成为推动科技进步和社会变革的关键力量。编写代码、解决问题、不断学习新技术,程序员们的日常充满了挑战与…...
论文笔记:Pre-training to Match for Unified Low-shot Relation Extraction
论文来源:ACL 2022 论文地址:https://aclanthology.org/2022.acl-long.397.pdf 论文代码:https://github.com/fc-liu/MCMN (笔记不易,请勿恶意转载抄袭!!!) 目录 A…...
一篇文章带你快速了解linux中关于信号的核心内容
1. 信号概念 信号是操作系统用来通知进程某个特定事件已经发生的一种方式。它们是一种软件中断,可以被发送到进程以对其进行异步通知。 2. 信号处理的三种方式 执行默认动作执行自定义动作忽略 signal() 函数:将信号处理设置为 SIG_IGN,可…...
openEuler、Linux操作系统常见操作-(6)如何登录Linux
如何登录Linux Linux登陆方式主要有如下两种: 。本地登陆 。一个典型的Linux系统将运行六个虚拟控制台和一个图形控制台,openEuler目前暂未支持图形化界面; 可以通过CtrlAltF[1-6]在6个虚拟控制台之间进行切换。 远程登录 。默认情况下openEuler支持远程登录&…...
Python基础语法条件
注释 注释的作用 通过用自己熟悉的语言,在程序中对某些代码进行标注说明,这就是注释的作用,能够大大增强程序的可读性。 注释的分类及语法 注释分为两类:单行注释 和 多行注释。 单行注释 只能注释一行内容,语法如下…...
006-MAVEN 的使用
MAVEN 的使用 一、依赖范围二、依赖的传递性三、依赖的原则四、依赖的排除 一、依赖范围 在引入log4j 依赖的时候,有一个scope设置,这个scope设置的值就是对应的依赖范围(因为compile 是默认的依赖范围,所以有时也可以省略)。 Maven 提供了…...
npm使用时报错:Could not retrieve https://npm.taobao.org/mirrors/node/index.json.
在使用npm时报错,报错信息如下: 报错的原因:是原来的淘宝镜像地址过期了 解决办法:修改镜像地址。打开nvm的安装地址 -->settings.txt文件 -->配置下载源 1、将settings.txt文件中的 node_mirror: https://npm.taobao.or…...
软考中级网络工程师——高级配置
文章目录 IS-ISBGP(边境网关协议)-IBGP-EBGP配置BFD(双向转发侦测)与Router-Static联动BFD与OSPF联动BFD与VRRP(虚拟路由器冗余协议)联动VRRP配置(基于网关备份)FW基础配置FW高级配置DHCP路由策略 IS-IS 第一步:每一个路由设置环回口地址 第二部:配置接…...
Leetcode 第 141 场双周赛题解
Leetcode 第 141 场双周赛题解 Leetcode 第 141 场双周赛题解题目1:3314. 构造最小位运算数组 I思路代码复杂度分析 题目2:3315. 构造最小位运算数组 II思路代码复杂度分析 题目3:3316. 从原字符串里进行删除操作的最多次数思路代码复杂度分析…...
Linux性能调优,还可以从这些方面入手
linux是目前最常用的操作系统,下面是一些常见的 Linux 系统调优技巧,在进行系统调优时,需要根据具体的系统负载和应用需求进行调整,并进行充分的测试和监控,以确保系统的稳定性和性能。同时,调优过程中要谨…...
STM32的独立看门狗定时器(IWDG)技术介绍
在嵌入式系统中,确保系统的稳定性和可靠性至关重要。看门狗定时器(Watchdog Timer, WDT) 是一种常用的硬件机制,用于监控系统的运行状态,防止系统因软件故障或意外情况进入不可预期的状态。STM32系列微控制器提供了两种…...
自动化生成工作流?英伟达提出ComfyGen:通过LLM来匹配给定的文本提示与合适的工作流程
ComfyGen的核心在于通过LLM来匹配给定的文本提示与合适的工作流程。该方法从500个来自用户的多样化提示生成图像,随后使用一系列美学预测模型对生成结果进行评分。这些评分与相应的工作流程形成了一个训练集,包含提示、工作流程及其得分的三元组。 然后…...
indicatorTree-v10练习(有问题)
目标:设计数据库表表格式,将“indicatorTree-v10.json”导入到数据库,再从数据库读取写为JSON文件。 其他要求:数据库要求为mysql数据库;编程语言暂时限定为C;JSON解析使用本文件夹中的cJSON.c和cJSON.h&am…...
python源码:指定麦克风/音响播放歌曲
前言 我使用pygame实现了指定麦克风/音响播放歌曲的功能,主要目的是解决直播过程的多源声道控制问题。 代码 # 查看自己的音频设备 # 请记住目标音频设备的具体名称 import pygame as mixer import pygame._sdl2 as sdl2mixer.init() # Initialize the mixer, thi…...
基于华为云智慧生活生态链设计的智能鱼缸
一. 引言 1.1 项目背景 随着智能家居技术的发展和人们对高品质生活的追求日益增长,智能鱼缸作为一种结合了科技与自然美的家居装饰品,正逐渐成为智能家居领域的新宠。本项目旨在设计一款基于华为云智慧生活生态链的智能鱼缸,它不仅能够提供…...
OJ-1015图像物体的边界
分析 思路 1.输入读取:读取网格的维度(M,N)和像素值到一个二维数组中。 2.迭代:遍历二维数组中的每个单元格。 3.边界检测:对于每个像素值为1的单元格,检查其八个相邻的单元格。如果任何相邻单元格的像素值为5,则增加边界计数。 4,边界计数调整:由于每…...
RAG 入门实践:从文档拆分到向量数据库与问答构建
本文将使用 Transformers 和 LangChain,选择在 Retrieval -> Chinese 中表现较好的编码模型进行演示,即 chuxin-llm/Chuxin-Embedding。 你还将了解 RecursiveCharacterTextSplitter 的递归工作原理。 一份值得关注的基准测试榜单:MTEB (M…...
445: 选择问题
解法: 第k大的数据查找 a, b map(int, input().split()) l list(map(int, input().split())) l.sort() print(l[b-1])...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...

