在浏览器中运行 Puppeteer:解锁新能力

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

支持的功能

在浏览器中运行Puppeteer时,虽然有一些限制,但依然提供了丰富的功能:

  • WebSocket 连接:通过WebSocket与现有的浏览器实例建立连接。注意,这不包括直接启动或下载浏览器,因为这依赖于Node.js的API。
  • 脚本评估:在浏览器上下文中执行JavaScript代码。
  • 文档操作:生成PDF和当前网页的屏幕截图。
  • 页面管理:创建、关闭页面以及在不同页面间导航。
  • Cookie 处理:检查、修改和管理浏览器内的Cookie。
  • 网络控制:监视和拦截浏览器发出的网络请求。

如何在浏览器中运行Puppeteer

要在浏览器中运行Puppeteer,你需要进行一些特别的设置:

  1. 生成浏览器兼容的构建:使用打包器(如Rollup或Webpack)生成与浏览器兼容的构建。

  2. 导入Puppeteer:使用puppeteer-core中特定于浏览器的入口点:

    import puppeteer from 'puppeteer-core/lib/esm/puppeteer/puppeteer-core-browser.js';
    
  3. 连接到浏览器实例

    const browser = await puppeteer.connect({browserWSEndpoint: wsUrl,
    });alert('Browser has ' + (await browser.pages()).length + ' pages');browser.disconnect();
    
  4. 使用打包器构建应用程序:例如,以下配置可以与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'],}),],
    };
    
  5. 包含有效的浏览器WebSocket端点:在连接到实例时,确保包含有效的浏览器WebSocket端点。

  6. 将生成的包包含到网页中:将打包后的文件包含到你的网页中,就可以开始使用Puppeteer的功能了。

浏览器中运行 Puppeteer 与在 Node.js 环境中运行区别

在浏览器中运行 Puppeteer 与在 Node.js 环境中运行有一些关键的区别。以下是一些主要的不同点:

  1. 环境差异

    • Node.js:Puppeteer 在 Node.js 中运行时,可以利用 Node.js 的生态系统和 API,包括文件系统访问、网络请求、CPU 和内存密集型任务等。
    • 浏览器:在浏览器中运行时,Puppeteer 受限于浏览器的安全策略和沙箱环境,无法直接访问文件系统或执行某些 Node.js 核心模块的功能。
  2. API 可用性

    • Node.js:可以访问 Node.js 的所有核心模块,如 fshttpchild_process 等。
    • 浏览器:只能使用浏览器提供的 API,如 DOM 操作、Web Storage、Fetch API 等。
  3. 浏览器自动化

    • Node.js:Puppeteer 可以启动和控制无头或有头浏览器,模拟用户交互,如点击、滚动、填写表单等。
    • 浏览器:在浏览器中运行的 Puppeteer 通常需要连接到一个已经运行的浏览器实例,无法自行启动浏览器。
  4. 性能考量

    • Node.js:通常在服务器或本地环境中运行,可以利用更多的系统资源,如 CPU 和内存,以提高性能。
    • 浏览器:受限于客户端设备的性能,可能无法处理大规模或资源密集型的任务。
  5. 部署和打包

    • Node.js:不需要特别的打包步骤,可以直接在服务器上运行 JavaScript 文件。
    • 浏览器:需要使用打包工具(如 Webpack 或 Rollup)将 Puppeteer 代码打包成浏览器可以理解的格式。
  6. 调试和开发工具

    • Node.js:可以使用 Node.js 的调试工具,如 node inspector 或 Visual Studio Code 的调试功能。
    • 浏览器:可以使用浏览器的开发者工具进行调试,这为前端开发者提供了更熟悉的调试环境。
  7. 代码执行

    • Node.js:可以直接执行 JavaScript 代码,包括 Puppeteer 脚本。
    • 浏览器:由于同源策略和其他安全限制,可能需要额外的处理来执行跨域请求或某些类型的脚本。
  8. 事件循环

    • Node.js:基于事件驱动的架构,拥有自己的事件循环和异步 I/O。
    • 浏览器:也基于事件驱动,但事件循环和任务队列的处理与 Node.js 不同,更侧重于用户界面的响应性。

总的来说,虽然在浏览器中运行 Puppeteer 提供了一些有趣的可能性,但它的功能和灵活性受到了浏览器环境的限制。在 Node.js 中运行 Puppeteer 仍然是自动化浏览器任务的主流和强大方式。

注意事项

  • 确保你使用的是最新版本的Puppeteer,以便获取最佳兼容性和功能支持。
  • 如果你需要完整的示例,可以访问Puppeteer的GitHub仓库。如果你遇到了网络问题导致无法访问,可能需要检查你的网络连接或稍后再试。

通过在浏览器中运行Puppeteer,你可以解锁一系列新的可能性,让你的Web应用更加强大和灵活。赶快试试吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/58052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Canvas与桌面】文山甲密铺桌面壁纸 1920*1080

【成图】 不加蒙版的部分截图&#xff1a; 加上蒙版的桌面壁纸图&#xff1a; 不加蒙版的桌面壁纸图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8&qu…

ts:对象数组的简单使用

ts中对象数组的简单使用 一、主要内容说明二、例子1、源码12、源码1运行效果 三、结语四、定位日期 一、主要内容说明 平常ts创建数组的格式如下&#xff1a; let array:string[]["元素1","元素2","元素3","元素3","元素4"…

在 Ubuntu 22.04 LTS 上安装 NVM (Node Version Manager) 管理和切换不同版本的 Node.js npm

安装 nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash# nvm --version 0.40.1安装 Node.js 的不同版本 列出所有可用的 Node.js 远程版本 nvm ls-remotenvm install v18.20.4# node --version v18.20.4# nvm current v18.20.4npm 是 …

Java语言-异常

目录 1.异常的概念与体系结构 1.1 异常的概念 1.2 异常的体系结构 1.3 异常的分类 1.3.1 编译时异常(受查异常) 1.3.2 运行时异常(非受查异常) 2.异常的处理 2.1 防御式编程 2.1.1 LBYL 2.1.2 EAFP 2.2 异常的抛出 2.3 异常的捕获 2.3.1 异常声明throws 2.3.2 …

gin入门教程(6):全局中间件,自定义中间件

在 Gin 中&#xff0c;中间件用于处理请求的预处理和后处理&#xff0c;可以实现日志、身份验证、跨域资源共享&#xff08;CORS&#xff09;等功能。下面是如何使用和创建中间件的基本步骤&#xff1a; 1. 使用内置中间件 Gin 提供了一些内置中间件&#xff0c;例如&#xf…

Docker 下备份恢复oracle

1.docker导出容器镜像 ##docker save -o 导出后的镜像名称.tar 容器名称|镜像id docker save -o oracle_11g.tar 3fa112fd3642 2.下载镜像上传镜像略 3.加载镜像 ##docker load -i <archive_file> docker load -i oracle11g11201.tar 4.添加版本号…

LeetCode 3185.构成整天的下标对数目 II:哈希表

【LetMeFly】3185.构成整天的下标对数目 II&#xff1a;哈希表 力扣题目链接&#xff1a;https://leetcode.cn/problems/count-pairs-that-form-a-complete-day-ii/ 给你一个整数数组 hours&#xff0c;表示以 小时 为单位的时间&#xff0c;返回一个整数&#xff0c;表示满足…

Spring IoC DI

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 JavaEE专栏:JavaEE 关注博主带你了解更多数据结构知识 目录 1. 应用分层 1.1 如何分层: 1.2 MVC与三层架构区别联系 2. Spring 3.IoC & DI⼊⻔ 3.1 什么是IoC&#xff1f; 3.2 DI 介绍 …

ctfshow——web(持续更新)

文章目录 1、web签到题——base64编码特征2、web2——登录框测试&sqlmap使用3、web3——php伪协议 1、web签到题——base64编码特征 查看源代码&#xff1a; base64编码特征&#xff1a;大小写数字&#xff0c;偶尔最后几位是。 2、web2——登录框测试&sqlmap使用 …

合约门合同全生命周期管理系统:企业智能合同管理的新时代

合约门合同全生命周期管理系统&#xff1a;企业智能合同管理的新时代 1. 引言 随着现代企业的快速发展&#xff0c;合同管理的复杂性日益增加。无论是采购合同、销售合同还是合作协议&#xff0c;合同管理已成为企业运营中至关重要的一环。传统的手工合同管理方式往往效率低下…

解读AVL树:平衡二叉搜索树的奥秘

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 前言&#xff1a; 前面我们已经介绍了二叉搜…

交易逆序对的总数 ---- 分治-归并

题目链接 题目: 分析: 解法一: 暴力解法, 遍历所有的数对, 找到逆序对, 需要两重for循环, 一定会超时解法二: 归并排序的思想如果我们将数组分成两半, 我们在每一半中各找一个数字, 判断是否为逆序对, 再根据归并的思想, 再将一半数组分半, 判断是否为逆序对, 直到数组只有一…

【论文笔记】xGen-MM (BLIP-3): A Family of Open Large Multimodal Models

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: xGen-MM (BLIP-3): A Fami…

网络编程_day3

#1024程序员节 #三次握手四次挥手#四次挥手#udp#recvfrom#sendto#服务器模型#客户端模型#Linux IO模型#阻塞式IO#非阻塞IO#设置非阻塞的方式 目录 【0】复习 【1】三次握手四次挥手 四次挥手 四次挥手既可以由客户端发起&#xff0c;也可以由服务器发起 【2】udp 1. 通信流程 2…

实验:使用Oxygen发布大型手册到Word格式

此前&#xff0c;我曾发表过一篇文章《结构化文档发布的故事和性能调优》&#xff0c;文中讨论了在将大型DITA手册转换为PDF格式时可能遇到的性能挑战及相应的优化策略。 近日&#xff0c;有朋友咨询&#xff0c;若将同样的大型手册输出为MS Word格式&#xff0c;是否也会面临…

Linux复习-C++

参考博客&#xff1a; https://blog.csdn.net/qq_45254369/article/details/126023482?ops_request_misc%257B%2522request%255Fid%2522%253A%252277629891-A0F3-4EFC-B1AC-410093596085%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&req…

[JAVAEE] 多线程的案例(一)-单例模式

目录 一. 单例模式 二. 单例模式的使用时机 三. 单例模式的关键代码 四. 单例模式的几种实现方式 4.1 饿汉方式(急) 4.2 懒汉模式(缓) a. 解决原子性的问题 b. 解决程序运行效率低下的问题 c. 解决指令重排序的问题(其次是为了解决内存可见性的问题) 五. 总结 一. …

HCIP-HarmonyOS Application Developer 习题(十七)

&#xff08;判断&#xff09;1、对于用户创建的一些临时卡片在遇到卡片服务框架死亡重启&#xff0c;此时临时卡片数据在卡片管理服务中已经删除&#xff0c;且对应的卡片ID不会通知到提供方&#xff0c;所以卡片使用方需要自己负责清理长时间未刚除的临时卡片数据。 答案&…

QT:MaintenanceTool 模块安装工具

QT的MaintenanceTool 工具对已安装的 Qt 进行卸载、修复等其他操作时提示At least one valid and enabled repository required for this action to succeed 解决方式&#xff1a;在设置中添加一个临时的仓库 https://mirrors.tuna.tsinghua.edu.cn/qt/online/qtsdkrepositor…

C++算法练习-day18——15.三数之和

题目来源&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目思路分析 题目描述&#xff1a; 给定一个包含 n 个整数的数组 nums&#xff0c;判断 nums 中是否存在三个元素 a&#xff0c;b&#xff0c;c &#xff0c;使得 a b c 0 &#xff1f;找出所有独特三元组…