在浏览器中运行 Puppeteer:解锁新能力
Puppeteer,这个强大的浏览器自动化工具,通常在Node.js环境中运行。但你有没有想过,在浏览器本身中运行Puppeteer会是什么样子?这不仅能让我们利用Puppeteer的功能完成更多任务,还能避开Node.js特定的限制。

支持的功能
在浏览器中运行Puppeteer时,虽然有一些限制,但依然提供了丰富的功能:
- WebSocket 连接:通过WebSocket与现有的浏览器实例建立连接。注意,这不包括直接启动或下载浏览器,因为这依赖于Node.js的API。
- 脚本评估:在浏览器上下文中执行JavaScript代码。
- 文档操作:生成PDF和当前网页的屏幕截图。
- 页面管理:创建、关闭页面以及在不同页面间导航。
- Cookie 处理:检查、修改和管理浏览器内的Cookie。
- 网络控制:监视和拦截浏览器发出的网络请求。
如何在浏览器中运行Puppeteer
要在浏览器中运行Puppeteer,你需要进行一些特别的设置:
-
生成浏览器兼容的构建:使用打包器(如Rollup或Webpack)生成与浏览器兼容的构建。
-
导入Puppeteer:使用
puppeteer-core中特定于浏览器的入口点:import puppeteer from 'puppeteer-core/lib/esm/puppeteer/puppeteer-core-browser.js'; -
连接到浏览器实例:
const browser = await puppeteer.connect({browserWSEndpoint: wsUrl, });alert('Browser has ' + (await browser.pages()).length + ' pages');browser.disconnect(); -
使用打包器构建应用程序:例如,以下配置可以与Rollup一起使用:
import { nodeResolve } from '@rollup/plugin-node-resolve';export default {input: 'main.mjs',output: {format: 'esm',dir: 'out',},external: ['chromium-bidi/lib/cjs/bidiMapper/BidiMapper.js'],plugins: [nodeResolve({browser: true,resolveOnly: ['puppeteer-core'],}),], }; -
包含有效的浏览器WebSocket端点:在连接到实例时,确保包含有效的浏览器WebSocket端点。
-
将生成的包包含到网页中:将打包后的文件包含到你的网页中,就可以开始使用Puppeteer的功能了。
浏览器中运行 Puppeteer 与在 Node.js 环境中运行区别
在浏览器中运行 Puppeteer 与在 Node.js 环境中运行有一些关键的区别。以下是一些主要的不同点:
-
环境差异:
- Node.js:Puppeteer 在 Node.js 中运行时,可以利用 Node.js 的生态系统和 API,包括文件系统访问、网络请求、CPU 和内存密集型任务等。
- 浏览器:在浏览器中运行时,Puppeteer 受限于浏览器的安全策略和沙箱环境,无法直接访问文件系统或执行某些 Node.js 核心模块的功能。
-
API 可用性:
- Node.js:可以访问 Node.js 的所有核心模块,如
fs、http、child_process等。 - 浏览器:只能使用浏览器提供的 API,如 DOM 操作、Web Storage、Fetch API 等。
- Node.js:可以访问 Node.js 的所有核心模块,如
-
浏览器自动化:
- Node.js:Puppeteer 可以启动和控制无头或有头浏览器,模拟用户交互,如点击、滚动、填写表单等。
- 浏览器:在浏览器中运行的 Puppeteer 通常需要连接到一个已经运行的浏览器实例,无法自行启动浏览器。
-
性能考量:
- Node.js:通常在服务器或本地环境中运行,可以利用更多的系统资源,如 CPU 和内存,以提高性能。
- 浏览器:受限于客户端设备的性能,可能无法处理大规模或资源密集型的任务。
-
部署和打包:
- Node.js:不需要特别的打包步骤,可以直接在服务器上运行 JavaScript 文件。
- 浏览器:需要使用打包工具(如 Webpack 或 Rollup)将 Puppeteer 代码打包成浏览器可以理解的格式。
-
调试和开发工具:
- Node.js:可以使用 Node.js 的调试工具,如
node inspector或 Visual Studio Code 的调试功能。 - 浏览器:可以使用浏览器的开发者工具进行调试,这为前端开发者提供了更熟悉的调试环境。
- Node.js:可以使用 Node.js 的调试工具,如
-
代码执行:
- Node.js:可以直接执行 JavaScript 代码,包括 Puppeteer 脚本。
- 浏览器:由于同源策略和其他安全限制,可能需要额外的处理来执行跨域请求或某些类型的脚本。
-
事件循环:
- Node.js:基于事件驱动的架构,拥有自己的事件循环和异步 I/O。
- 浏览器:也基于事件驱动,但事件循环和任务队列的处理与 Node.js 不同,更侧重于用户界面的响应性。
总的来说,虽然在浏览器中运行 Puppeteer 提供了一些有趣的可能性,但它的功能和灵活性受到了浏览器环境的限制。在 Node.js 中运行 Puppeteer 仍然是自动化浏览器任务的主流和强大方式。
注意事项
- 确保你使用的是最新版本的Puppeteer,以便获取最佳兼容性和功能支持。
- 如果你需要完整的示例,可以访问Puppeteer的GitHub仓库。如果你遇到了网络问题导致无法访问,可能需要检查你的网络连接或稍后再试。
通过在浏览器中运行Puppeteer,你可以解锁一系列新的可能性,让你的Web应用更加强大和灵活。赶快试试吧!
相关文章:
在浏览器中运行 Puppeteer:解锁新能力
Puppeteer,这个强大的浏览器自动化工具,通常在Node.js环境中运行。但你有没有想过,在浏览器本身中运行Puppeteer会是什么样子?这不仅能让我们利用Puppeteer的功能完成更多任务,还能避开Node.js特定的限制。 支持的功…...
Kafka消费者故障,出现活锁问题如何解决?
大家好,我是锋哥。今天分享关于【Kafka消费者故障,出现活锁问题如何解决?】面试题?希望对大家有帮助; Kafka消费者故障,出现活锁问题如何解决? 1000道 互联网大厂Java工程师 精选面试题-Java资…...
pytorch 交叉熵损失函数 BCELoss
BCE Loss 交叉熵损失函数计算公式: BCE Loss - 1/n*(y_actual * log(y_pred) (1 - y_actual) * log(1 - y_pred)) t[i]为标签值:0或者1 o[i]是经过sigmoid后的概率值 BCEWithLogitsLoss 这个损失将Sigmoid层和BCELoss合并在一个类中。 BCEWithLog…...
【进阶】面向对象之接口(多学三招)
文章目录 IDK8开始接口中新增的方法1.允许在接口中定义默认方法,需要使用关键字default修饰2.接口中的默认方法的定义格式3.接口中默认方法的注意事项总结 IDK8开始接口中新增的方法 JDK7以前:接口中只能定义抽象方法。JDK8的新特性:接口中可以定义有方法体的方法。(默认、静态…...
linux上trace code的几种方法
我们在看代码时,总是会遇到下面问题: 1.查看某个场景下的代码执行流 2.查看某个函数被执行时的routine 但是,如果直接查看源码,源码可能代码量大,且分支多,不容易理清。就需要让相关程序运行起来查看。 …...
文件操作(1) —— 文件基础知识
目录 1. 为什么使用文件? 2. 文件种类【按功能分】 3. 文件名 4. 数据文件种类【按存储方式细分】 5. 文件的打开和关闭 5.1 流和标准流 5.2 文件指针 5.3 文件的打开和关闭函数 6. 文件缓冲区 1. 为什么使用文件? 如果没有⽂件,我…...
4K双模显示器7款评测报告
4K双模显示器7款评测报告 HKC G27H7Pro 4K双模显示器 ROG华硕 XG27UCG 4K双模显示器 雷神 ZU27F160L 4K双模显示器 泰坦军团 P275MV PLUS 4K双模显示器 外星人(Alienware)AW2725QF 4K双模显示器 SANC盛色 D73uPro 4K双模显示器 ANTGAMER蚂蚁电竞 …...
2024.10.24华为(留学生)笔试题解
第一题集装箱堆叠 看注释即可 // 看题目,是最长连续序列的变种。底应该选大的,然后往上堆叠选择次大的(越接近底越好?) // 后续想一下,像是动态规划? // 再一想,好像排序后很容易处理#include <bits/stdc++.h> #include <functional> using namespace st…...
基于neo4j的医疗问诊系统
当你身体不适时,想要找到准确的答案却经常遇到模棱两可的答复,糟心吗?现在,基于neo4j的智能医疗问诊系统为你带来全新体验!我们设计了一个具备自动化问答功能的医疗系统,帮助用户快速获取专业的健康知识答案…...
java :String 类
在我们之前的讲解中我们已经了解了很多的Java知识,这节我们讲Java中字符如何定义以及关于String如何使用还有常见的string函数。 【本节目标】 1. 认识 String 类 2. 了解 String 类的基本用法 3. 熟练掌握 String 类的常见操作 4. 认识字符串常量池 5. 认识 …...
关于非中文或者url文本不换行的问题
我在一个写一个简单的url展示的时候,发现url一直溢出不换行,查了各种方法不管用,我请教了我大哥,他直接甩给我两个css放进去就好了 word-break:break-all; 按字符截断换行 /* 支持IE和chrome,FF不支持*/ word-w…...
LeetCode 热题 100之矩阵
1.矩阵置0 思路分析:使用标记数组 记录需要置为 0 的行和列:使用两个布尔数组 zeroRows 和 zeroCols 来记录需要置为 0 的行和列两次遍历 第一遍遍历整个矩阵,找到所有为0的元素,并更新zeroRows和zeroCols;第二遍遍历…...
YOlO系列——yolo v3
文章目录 一、算法原理二、网络结构三、正负样本匹配规则四、损失函数五、边框预测六、性能特点七、应用场景 YOLO-v3(You Only Look Once version 3)是一种先进的目标检测算法,属于YOLO系列算法的第三代版本。以下是对YOLO-v3的详细介绍&…...
基于Datawhale开源量化投资学习指南(11):LightGBM在量化选股中的优化与实战
1. 概述 在前几篇文章中,我们初步探讨了如何通过LightGBM模型进行量化选股,并进行了一些简单的特征工程和模型训练。在这一篇文章中,我们将进一步深入,通过优化超参数和实现交叉验证来提高模型的效果,并最终通过回测分…...
Python4
4. 更多控制流工具 除了刚介绍的 while 语句,Python 还用了一些别的。我们将在本章中遇到它们。 4.1. if 语句 if elif else if x<0: x 0 print(Negative changed to zero) elif x0: print( zero) else: print(More) 4.2. for 语句 Pyth…...
springboot系列--web相关知识探索六
一、前言 web相关知识探索五中研究了请求中所带的参数是如何映射到接口参数中的,也即请求参数如何与接口参数绑定。主要有四种、分别是注解方式、Servlet API方式、复杂参数、以及自定义对象参数。web相关知识探索五中主要研究自定义对象参数数据绑定底层原理。本次…...
FreeSWITCH 简单图形化界面30 - 使用MYODBC时可能遇到的错误
FreeSWITCH 简单图形化界面30 - 使用MYODBC时可能遇到的错误 测试环境1、 MYODBC 3.51.18 or higher2、分析和解决2.1 解决1,降级MySQL ODBC2.2 解决2,修改FreeSWITCH代码 测试环境 http://myfs.f3322.net:8020/ 用户名:admin,密…...
阿里云物联网的通信方式
阿里云物联网通信的两种方式,一个是物模型(分为服务,事件,属性),一个是自定义topic(要另外设置数据流转) 1.使用产品内的功能定义,(其实也就是Topic中定义好的…...
自由职业者的一天:作为小游戏开发者的真实工作日记
大家好,我是小蜗牛。 在这个快节奏的数字时代,自由职业者的生活往往充满了挑战与机遇。作为一名微信小游戏开发者,我的日常工作并不像人们想象中的那样充满光鲜亮丽的画面,而是由无数的编码、调试和创意碰撞组成的。今天…...
【RL Latest Tech】分层强化学习:Option-Critic架构算法
📢本篇文章是博主强化学习RL领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果 在 save_images 方法中,删除或注释掉所有与 metadata …...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...
