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

在浏览器中运行 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应用更加强大和灵活。赶快试试吧!

相关文章:

在浏览器中运行 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的医疗问诊系统

当你身体不适时&#xff0c;想要找到准确的答案却经常遇到模棱两可的答复&#xff0c;糟心吗&#xff1f;现在&#xff0c;基于neo4j的智能医疗问诊系统为你带来全新体验&#xff01;我们设计了一个具备自动化问答功能的医疗系统&#xff0c;帮助用户快速获取专业的健康知识答案…...

java :String 类

在我们之前的讲解中我们已经了解了很多的Java知识&#xff0c;这节我们讲Java中字符如何定义以及关于String如何使用还有常见的string函数。 【本节目标】 1. 认识 String 类 2. 了解 String 类的基本用法 3. 熟练掌握 String 类的常见操作 4. 认识字符串常量池 5. 认识 …...

关于非中文或者url文本不换行的问题

我在一个写一个简单的url展示的时候&#xff0c;发现url一直溢出不换行&#xff0c;查了各种方法不管用&#xff0c;我请教了我大哥&#xff0c;他直接甩给我两个css放进去就好了 word-break:break-all; 按字符截断换行 /* 支持IE和chrome&#xff0c;FF不支持*/ word-w…...

LeetCode 热题 100之矩阵

1.矩阵置0 思路分析&#xff1a;使用标记数组 记录需要置为 0 的行和列&#xff1a;使用两个布尔数组 zeroRows 和 zeroCols 来记录需要置为 0 的行和列两次遍历 第一遍遍历整个矩阵&#xff0c;找到所有为0的元素&#xff0c;并更新zeroRows和zeroCols&#xff1b;第二遍遍历…...

YOlO系列——yolo v3

文章目录 一、算法原理二、网络结构三、正负样本匹配规则四、损失函数五、边框预测六、性能特点七、应用场景 YOLO-v3&#xff08;You Only Look Once version 3&#xff09;是一种先进的目标检测算法&#xff0c;属于YOLO系列算法的第三代版本。以下是对YOLO-v3的详细介绍&…...

基于Datawhale开源量化投资学习指南(11):LightGBM在量化选股中的优化与实战

1. 概述 在前几篇文章中&#xff0c;我们初步探讨了如何通过LightGBM模型进行量化选股&#xff0c;并进行了一些简单的特征工程和模型训练。在这一篇文章中&#xff0c;我们将进一步深入&#xff0c;通过优化超参数和实现交叉验证来提高模型的效果&#xff0c;并最终通过回测分…...

Python4

4. 更多控制流工具 除了刚介绍的 while 语句&#xff0c;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相关知识探索五中研究了请求中所带的参数是如何映射到接口参数中的&#xff0c;也即请求参数如何与接口参数绑定。主要有四种、分别是注解方式、Servlet API方式、复杂参数、以及自定义对象参数。web相关知识探索五中主要研究自定义对象参数数据绑定底层原理。本次…...

FreeSWITCH 简单图形化界面30 - 使用MYODBC时可能遇到的错误

FreeSWITCH 简单图形化界面30 - 使用MYODBC时可能遇到的错误 测试环境1、 MYODBC 3.51.18 or higher2、分析和解决2.1 解决1&#xff0c;降级MySQL ODBC2.2 解决2&#xff0c;修改FreeSWITCH代码 测试环境 http://myfs.f3322.net:8020/ 用户名&#xff1a;admin&#xff0c;密…...

阿里云物联网的通信方式

阿里云物联网通信的两种方式&#xff0c;一个是物模型&#xff08;分为服务&#xff0c;事件&#xff0c;属性&#xff09;&#xff0c;一个是自定义topic&#xff08;要另外设置数据流转&#xff09; 1.使用产品内的功能定义&#xff0c;&#xff08;其实也就是Topic中定义好的…...

自由职业者的一天:作为小游戏开发者的真实工作日记

大家好&#xff0c;我是小蜗牛。 在这个快节奏的数字时代&#xff0c;自由职业者的生活往往充满了挑战与机遇。作为一名微信小游戏开发者&#xff0c;我的日常工作并不像人们想象中的那样充满光鲜亮丽的画面&#xff0c;而是由无数的编码、调试和创意碰撞组成的。今天&#xf…...

【RL Latest Tech】分层强化学习:Option-Critic架构算法

&#x1f4e2;本篇文章是博主强化学习RL领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在&#x1f…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

.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 适用场…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...