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

如何使用 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])...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 ​ 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

基础测试工具使用经验

背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

GitHub 趋势日报 (2025年06月08日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) ​遍历字符串​:通过外层循环逐一检查每个字符。​遇到 ? 时处理​: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: ​与…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...