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

nodejs之jsdom插件,运行浏览器环境

https://www.npmjs.com/package/jsdom

一、安装依赖
npm install jsdom
二、用法
var jsdom = require('jsdom')
var { JSDOM } = jsdom;
var dom =  new JSDOM(`<!DOCTYPE html><html lang="cn"><head></head><body></body></html>`);
window = dom.window
document=window.document
navigator=window.navigator  
//使用jq     
const $ = require( "jquery" )( window ); 
三、方法
  1. new JSDOM(domStr,option) 实例化一个dom环境
    new JSDOM('',{url: 'https://example.org/',  // window.location,document.URLreferrer: 'https://example.org/', // document.referrercontentType: 'text/html',//内容类型storageQuota: 10000000, //缓存大小userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36',//userAgent请求头includeNodeLocations: true,//允许查找dom位置,runScripts: 'dangerously',//启用在页面内执行js,outside-only在外部执行js:window.eval()cookieJar: new jsdom.CookieJar(),//cokkiepretendToBeVisual:true,//因为JSDOM是无头的,该配置可假装是有头的,window.requestAnimationFrame() 、window.cancelAnimationFrame()resources:new jsdom.ResourceLoader(option),//jsdom不会加载任何子资源(脚本、样式表、图像或iframe),该配置加载子资源virtualConsole:new jsdom.VirtualConsole(),//虚拟控制台beforeParse(window) {}
    }) 
    
  2. JSDOM.fromURL() 通过url 实例化dom环境
    JSDOM.fromURL('https://www.baidu.com/', { //同new JSDOM 中的option 
    }).then(dom => {console.log(dom.serialize());
    });
    
  3. JSDOM.fragment()通过字符串创建dom
    const document = JSDOM.fragment('<p>Hello<span>span</span></p><p><strong>Hi!</strong></p>');console.log(document.querySelector('p').innerHTML)
    
  4. JSDOM.fromFile() 通过文件实例化dom环境
    JSDOM.fromFile('stuff.html', {//同new JSDOM 中的option
    }).then(dom => {console.log(dom.serialize());
    });
    
  5. 页面内执行js:runScripts
    var dom = new JSDOM('<script>console.log(1)</script>', { runScripts: "dangerously"})
    
  6. new jsdom.ResourceLoader(option) 加载子资源
    const resources = new jsdom.ResourceLoader({proxy: 'http://127.0.0.1:9001', //HTTP代理的地址。strictSSL: false, //禁用SSL证书userAgent: 'Mellblomenator/9000',//userAgent请求头
    })
    const dom = new JSDOM('', { resources });
    
  7. new jsdom.VirtualConsole() 虚拟控制台
    const virtualConsole = new jsdom.VirtualConsole()
    const dom = new JSDOM(``, { virtualConsole });//监听事件
    virtualConsole.on("error", () => { ... });
    virtualConsole.on("warn", () => { ... });
    virtualConsole.on("info", () => { ... });
    virtualConsole.on("dir", () => { ... });
    //重定向控制台到node
    virtualConsole.sendTo(console,{ omitJSDOMErrors: true //jsdom报错信息
    })
    
  8. new jsdom.CookieJar() cookie
    const cookieJar = new jsdom.VirtualConsole(store, options)
    const dom = new JSDOM(``, { cookieJar });
    
  9. dom.serialize() 获取序列化dom
  10. dom.nodeLocation(bodyEl) 查找位置
    const dom = new JSDOM('<body><p></p></body>', {includeNodeLocations: true
    })dom.window.onload = () => {console.log(dom.nodeLocation(dom.window.document.body))
    }
    
  11. dom.window window对象
  12. document document对象
  13. window.navigator navigator对象

相关文章:

nodejs之jsdom插件,运行浏览器环境

https://www.npmjs.com/package/jsdom 一、安装依赖 npm install jsdom二、用法 var jsdom require(jsdom) var { JSDOM } jsdom; var dom new JSDOM(<!DOCTYPE html><html lang"cn"><head></head><body></body></htm…...

运行vite项目报错:await import(‘source-map-support‘).then((r) => r.default.install())

项目场景&#xff1a; Electron vue3 vite项目实现屏幕截图功能 问题描述 运行 npm run dev 启动项目报错 await import(source-map-support).then((r) > r.default.install()) PS D:\study\electron\electronDemo> npm run dev> electronDemo0.0.1 dev D:\study…...

【GIT版本控制】--安装GIT

一、在不同操作系统上安装GIT 在不同操作系统上安装GIT非常容易&#xff0c;以下是针对不同操作系统的安装步骤&#xff1a; 在Windows上安装GIT&#xff1a; 访问 Git官方网站。下载适合您Windows版本的GIT安装程序&#xff08;32位或64位&#xff09;。运行下载的安装程序。…...

java 常见api Arrays类

int类型数组 package daysreplace;import java.util.Arrays;public class Test {public static void main(String[] args) {int[] arrays{38,24,42,56,22,44};//直接输出数组名称就是内存地址System.out.println(arrays);//Arrays.toString()会将数组内容转成字符串形式System…...

Java常见设计模式

单例模式&#xff1a;程序自始至终只创建一个对象。 应用场景&#xff1a;1.整个程序运行中只允许一个类的实例时 2.需要频繁实例化然后销毁的对象 3.创建对象时耗时过多但又经常用到的对象 4.方便资源相互通信的环境 懒汉式线程不安全问题解决方案&#xff1a; 双重检查加锁机…...

Hive 【Hive(七)窗口函数练习】

窗口函数案例 数据准备 1&#xff09;建表语句 create table order_info (order_id string, --订单iduser_id string, -- 用户iduser_name string, -- 用户姓名order_date string, -- 下单日期order_amount int -- 订单金额 ); 2&#xff09;装载语句 i…...

C++深入学习part_1

Linux下编译C程序 安装g命令&#xff1a;sudo apt install g 编译命令&#xff1a;$ g *.cc 或者 *.cpp -o fileName; hellworld 编译程序可以看到&#xff1a; namespace命名空间 首先&#xff0c;命名空间的提出是为了防止变量重名冲突而设置的。 浅浅试一下&#xff1…...

leetCode 300.最长递增子序列 (贪心 + 二分 ) + 图解 + 优化 + 拓展

300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff…...

Spring加载后置处理器方式之模板方法

Spring加载后置处理器方式之模板方法 1. 未使用模板方法时2. 使用模板方法后 1. 未使用模板方法时 public static void main(String[] args) {MyBeanFactory myBeanFactory new MyBeanFactory();myBeanFactory.getBean();}static class MyBeanFactory {public Object getBean(…...

【高性能计算】CUDA编程之OpenCV的应用(教程与代码-4)//test error

imread命令将返回以蓝色、绿色和红色&#xff08;BGR格式&#xff09;开头的三个通道 处理视频的main函数中需要做的第一件事是创建VideoCapture对象。 GPU CUDA模块中的函数都定义在cv::cuda命名空间中&#xff0c;将设备上配置给图像数据用的显存块作为其参数。 gettickcount…...

高德地图行政区域四级级联数据拉取;省市区县乡镇级联数据

高德地图行政区域四级级联数据拉取 高德地图行政区域级联选择 高德地图行政区域级联选择 使用以下代码拉取高德官方省市区县乡镇四级级联数据 function p(name/* 行政区域名称 */){return $.ajax({"url": "https://lbs.amap.com/_AMapService/v3/config/dis…...

Qt_基础

目录 1概述1.1 什么是QT1.2 QT的发展史1.3 支持的平台1.4 QT版本1.5 下载与安装1.6 QT的优点1.7 成功案例 2 创建 Qt 项目2.1 使用向导创建2.2 .pro文件2.3 帮助文档(QTcreator自带的)2.4 QT应用程序介绍 3 创建第一个小程序3.1 按钮的创建3.1.1 设置主窗口标题的函数3.1.2 **固…...

最新AI创作系统源码ChatGPT网站源码V2.6.3/支持Midjourney绘画/支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Chat…...

UML建模语言分析和设计

UML&#xff08;Unified Modeling Language&#xff0c;统一建模语言&#xff09;是一种用于软件系统分析、设计和实现的标准化建模语言。UML提供了多种图形化工具&#xff0c;用于描述系统的不同方面&#xff0c;包括用例、类、对象、状态、活动和序列等。 在软件开发中&…...

SystemUI导航栏

SystemUI导航栏 1、系统中参数项1.1 相关开关属性2.2 属性设置代码 2、设置中设置“三按钮”导航更新流程2.1 属性资源覆盖叠加2.2 SystemUI导航栏接收改变广播2.3 SystemUI导航栏布局更新2.4 时序图 android13-release 1、系统中参数项 1.1 相关开关属性 设置->系统->…...

3d 贴图下载quixel

Quixel Megascans https://polyhaven.com/a/studio_small_03 Quixel Bridge&#xff1a;3D艺术家的宝库 在3D建模和渲染的世界中&#xff0c;找到高质量、适合项目的贴图素材至关重要。Quixel Bridge就是这样一个为3D艺术家提供大量免费贴图素材的资源库。在本文中&#xff…...

Linux权限维持

SSH 后门 软链接sshd 目标主机建立软连接&#xff1a; ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oport1189 #端口可以任意指定&#xff0c;最好伪装一下 查看端口&#xff1a; netstat -anlp|grep 1189 攻击机ssh登录&#xff1a; ssh rootx.x.x.x -p 1189 #如果root用户…...

互联网通信的核心协议HTTP和HTTPS

HTTP&#xff1a;超文本传输协议 HTTP&#xff0c;全称为超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff09;&#xff0c;是一种用于在Web上传输超文本文档的协议。它是Web通信的基础&#xff0c;允许浏览器与Web服务器之间的数据交换。HTTP使用了经典的客户…...

javaWeb网上购物系统的设计与实现

摘 要 随着计算机网络技术的飞速发展和人们生活节奏的不断加快&#xff0c;电子商务技术已经逐渐融入了人们的日常生活当中&#xff0c;网上商城作为电子商务最普遍的一种形式&#xff0c;已被大众逐渐接受。因此开发一个网上商城系统&#xff0c;适合当今形势&#xff0c;更加…...

MySQL 主从复制、读写分离

MySQL 主从复制、读写分离 1、MySQL 主从复制1.1什么是主从复制&#xff1f;1.2为什么要读写分离呢&#xff1f;1.3 什么时候要读写分离&#xff1f;1.4主从复制与读写分离1.5mysql支持的复制类型1.6主从复制的工作过程1.7MySQL 读写分离原理1.8目前较为常见的 MySQL 读写分离分…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

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

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...