【截图服务 +打包】pkg打包 puppeteer

目录

最后结论

windows打包成服务 

定制executablePath 

用程序来查找chrome.exe 代替上面的写配置文件

服务遇到的问题

 使用java开一个线程启动

遇到的问题与解决

版本匹配问题

打出包后的运行报错问题

linux下的安装

安装n

库缺少

程序运行后的报错

制作

运行报错与修改后成功

方式二chromedrive

实验数据

参考文档


最后结论

pkg -t win --public ./screenshots.js --output ./dist/screen.exe

服务启动:

postman调用 : 

windows打包成服务 

  

D:\web-video-platform\nssm.exe install wvp-screen  "D:\web-video-platform\chrome\screen"
rem D:\web-video-platform\nssm.exe set wvp-screen AppDirectory "D:\web-video-platform\chrome"
D:\web-video-platform\nssm.exe start wvp-screen

定制executablePath 

{"executablePath": "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
}

使用方法 

const config2 = require("D:\\web-video-platform\\chrome\\puppeteer.config.json");

let chromePath = await findChromePath(winreg.HKLM,'\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\chrome.exe',"Path");chromePath = chromePath+ "\\chrome.exe";logStream.write(`I  should have it here :${chromePath}\n`);

用程序来查找chrome.exe 代替上面的写配置文件

   可以灵活根据每台主机本身的情况

async function findChromePath(myhive,mykey,myvalue) {const chromeKey = new winreg({hive: myhive,//winreg.HKLM,key: mykey,//'\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\chrome.exe'});try {const result = await new Promise((resolve, reject) => {chromeKey.get(myvalue, (err, result) => {if (err) {reject(err);} else {resolve(result);}});});console.log(result.value);return result.value ;} catch (err) {console.error('Chrome installation path not found in registry.');return null;}
}

服务遇到的问题

    会找不着系统默认的chrome位置 

    会有时候截图是空

 使用java开一个线程启动

     会截图几次后服务死掉

遇到的问题与解决

版本匹配问题

pkg 这里说的是v3.5,实际装的是5.8.1,没有关系;可以向下兼容。

但node 18.15.0以上的就没有能与pkg相匹配相适应 的, 所以只能选 这个 。

node,21 ,19.8.1 在工程里都试过了,工程本身可以,但pkg进行打包时,说明pkg没有找到能匹配 》19版本的实现,所以,只能选  18.15.0 

打出包后的运行报错问题

 如下解决nodejs + pkg+ puppeteer 路径问题以及 Passed function is not well-serializable 问题_passed function cannot be serialized!-CSDN博客

linux下的安装

安装n

由于gcc没有装,先装gcc ;然后再装glibc23 

linux文件版本管理,Linux下使用n来管理多版本NodeJS-CSDN博客

库缺少

 /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ../../bin/xxx)
 /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ../../bin/xxx)
————————————————

            Error: /lib64/libstdc++.so.6: version `CXXABI_1.3.9‘ not found-CSDN博客 

因为已经安装了gcc 9.x的版本,所以找找就好

# 查询本机的so库
find / -name "libstdc++.so.*"

cp /usr/local/gcc/...../libstdc++.so.6.0.28 /usr/lib64

ln -snf ./libstdc++.so.6.0.28 ./libstdc++.so.6

程序运行后的报错

Error: Failed to launch the browser process! /root/.cache/puppeteer/chrome/linux-123.0.6312.58/chrom

centos puppeteer问题汇总_missing x server or $display-CSDN博客

制作

pkg -t linux --public ./screenshots.js --output ./dist/screen

运行报错与修改后成功

如果 没有装浏览器,会报错

Error: Failed to launch the browser process! /root/.cache/puppeteer/chrome/l

我们直接装下chrome 

成功! 

地址 10.60.100.194: /home/java/mesh/screen/dist

方式二chromedrive

需要: chromedrive.exe 及版本号与之完全对应的chrome

这会导致安装包很大。

如下的方式,没有做成服务,每次调用都要调动chrome,耗费几秒;应该把chrome启动后,作为服务,一直放着。

public static void main(String[] args) throws Exception {// String path = "E:\\chromes\\107\\App\\Chrome-bin\\chrome.exe";// System.setProperty("webdriver.chrome.bin", path);System.setProperty("webdriver.chrome.driver","chromedriver.exe");ChromeOptions options = new ChromeOptions();// options.setBinary(path);options.addArguments("--headless");  //无界面模式options.addArguments("--disable-gpu");  // headless模式下,windows系统可能需要options.addArguments("--window-size=1920,1080");  //缺少此配置,headless模式可能点击不到元素options.addArguments("--remote-allow-origins=*");options.addArguments("--start-maximized");  //启动时最大化窗口WebDriver webDriver = new ChromeDriver(options);String url = "https://www.baidu.com/";
//        String url = "http://localhost:6767/#/wvp/alarmScreenShotMap?lnglat=121.449333,31.025822";webDriver.get(url);webDriver.manage().window().maximize();Thread.sleep(8000);WebElement element = webDriver.findElement(By.id("containerForShot"));File screenshotFile = ((TakesScreenshot) element).getScreenshotAs(OutputType.FILE);FileUtils.copyFile(screenshotFile, new File("static/shot/test.png"));webDriver.quit();}

实验数据

   性能 :只启动了一个browse

    内存500M (感觉 有点多)

参考文档

nodejs + pkg+ puppeteer 路径问题以及 Passed function is not well-serializable 问题_passed function cannot be serialized!-CSDN博客

#打包 #exe #pkg 使用 pkg 将 nodejs 打包编译为 exe_pkg打包nodejs-CSDN博客

Releases · vercel/pkg-fetch (github.com)

主要是这个工程参考

netwild/screenshots: A small tool based on Nodejs environment, using Puppeter to take full screen screenshots of any webpage (github.com)

安装n需要的更新 :

升级glibc (gcc make等)

 CentOS上升级glibc2.17至glibc2.31_glibc 升级-CSDN博客

Chrome浏览器版本和chromedriver兼容对照_chromedriver版本对应-CSDN博客

Release 109.0.5414.120 · ulixee/chrome-versions (github.com)

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

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

相关文章

化工机械如何精准地进行网络营销推广?

合作咨询联系竑图 hongtu201988 化工机械行业该如何做网络推广,让销量和利润都有明显的提升呢?湖南竑图网络来为大家分析分析: 一、产品的用户是谁? 在传统行业中,用户群体的多样性不容忽视。比如机械设备有很多种&am…

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果&#xff1a; 解密后的数据就是正常数据&#xff1a; 后端&#xff1a;使用的是spring-cloud框架&#xff0c;在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30…

Kamailio-超强dispatcher负载均衡模块

Kamailio 负载均衡的功能主要依靠 Dispatcher 模块完成&#xff0c;模块官方文档参看 为什么要引入负载均衡&#xff1f;如何使用&#xff1f; 引入和配置功能路由调用命令行指令 为什么要引入负载均衡&#xff1f; Q: 如果单台VOIP服务的性能不能满足业务需求了&#xff0…

C++中的I/O流

本节主要看代码理解 I/O流继承关系 iostream 主要类 cin cout cerr clog while&#xff08;cin>>str&#xff09; &#xff5b; //处理 &#xff5d; 当接收ctrl z 或 ctrl c时&#xff0c;会停止&#xff0c; 原理&#xff1a;重载操作符bool&#xff0c;令指定istr…

Meta:大语言模型可以通过自我批判取得大幅提升!

夕小瑶科技说 原创 作者 | 谢年年 论文的审稿模式想必大家都不会陌生&#xff0c;一篇论文除了分配多个评审&#xff0c;最后还将由PC综合评估各位审稿人的reviews撰写meta-review。 最近&#xff0c;来自Meta的研究团队将这一模式引进到大模型的对齐训练中。模型同时扮演 执…

poker (GuanDan)

poker &#xff08;GuanDan&#xff09; 掼蛋 基础比大小规则: ①单牌 2最小与以往不太一样&#xff08;2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < J < Q < K < A < Joker&#xff09; 如果本级打9&#xff0c;那么9就比A大&#xff0c;…

EasyExcel相关整理

一、实体类常用注解 1、字段注解ExcelProperty&#xff0c;一般常用value标明表头&#xff0c;index标明列 2、实体类注解&#xff08;导出样式设置&#xff09; 3、导出特殊类型转换 二、导出 1、导出多个sheet 2、导出数据量大导致内存溢出 三、导入 待更新

安装Anaconda(过程)

Anaconda是一个开源的Python发行版本&#xff0c;用来管理Python相关的包&#xff0c;安装Anaconda可以很方便的切换不同的环境&#xff0c;使用不同的深度学习框架开发项目&#xff0c;本文将详细介绍Anaconda的安装。 一、安装 1、安装方式 官网&#xff1a;“https://www.…

JVM - GC垃圾回收

文章目录 目录 文章目录 1. 自动垃圾回收 1.1 垃圾回收区域 2. 方法区回收 3. 堆回收 3.1 对象已死&#xff1f; 3.1.1 引用计数算法 3.1.2 可达性分析算法 3.1.3 再谈引用 强引用 软引用 弱引用 虚引用 3.2 垃圾收集算法 3.2.1 分代收集理论 3.2.2 垃圾回收算…

FlinkCDC 3.2.0 新增优点 Pattern Replacement in routing rules

新增优点&#xff1a;Pattern Replacement in routing rules flinkcdc 3.2.0版本相较于3.1.0版本&#xff0c;避免了多表多sink多次写 route 路由的麻烦&#xff0c;类似于统一前后缀的形式多表多sink&#xff0c;通过<>正则&#xff0c;大大减少了书写 官网&#xff1…

小项目建议用redis替换mq

在简单的、性能要求高的场景下&#xff0c;Redis 可以很好地替代 RabbitMQ&#xff0c;但对于复杂的消息系统需求&#xff0c;RabbitMQ 仍然是更合适的选择。 部署和运维简化 用redis替换mq最大的好处是&#xff1a;部署和运维简化。如果已经在项目中使用 Redis&#xff0c;继…

Linux学习-Ansible(二)

基本配置 #主机清单文件 [rootharbor ansible]# cat hostlist [web] 192.168.29.161 192.168.29.162 [es] 192.168.29.171 192.168.29.172 192.168.29.173 #查看所有被管理的主机 [rootharbor ansible]# ansible all --list-hostshosts (5):192.168.29.161192.168.29.162192.1…

CMS需求文档

CMS需求文档 文章目录 CMS需求文档一、单体(分布式)架构二、技术三、面向用户四、功能列表1.1.用户管理1.2.权限体系1.3.多站点1.4.模板管理1.5.媒体管理(资源库)1.6.内容组织(分类)1.7.内容创作(稿件库)1.8.内容发布1.9.全文检索1.10.内容词汇1.11.性能优化1.12.日志记录1…

华为OD机试真题E卷-计算网络信号(含题目描述+解题思路+代码解析)

最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 题目描述: 网络信号经过传递会逐层衰减,且遇到阻隔物无法直接穿透,在此情况下需要计算某个位置的网络信号值。注意:网络信号可以绕过阻隔物 array[m][n]的二维数组代表网格地图…

初始Linux 和 各种常见指令

目录 Linux背景 1. 发展史 Linux发展历史 1.历史 2. 开源 Linux下基本指令 01. ls 指令 02. pwd命令 03. cd 指令 04. touch指令 05.mkdir指令&#xff08;重要&#xff09;&#xff1a; 06.rmdir指令 && rm 指令&#xff08;重要&#xff09;&#xff1a; …

这项新技术让 AI 感知自己的情感——也感知你的情感

今天&#xff0c;位于纽约的新创公司Hume AI推出了一个全新的“共情语音界面”&#xff0c;使得可以在Anthropic、谷歌、Meta、Mistral以及OpenAI的大型语言模型中添加一系列情感表达的声音&#xff0c;以及对情感敏感的耳朵——这预示着一个时代的到来&#xff0c;届时AI助手可…

【Vue3】自动化路由配置:Vue3与unplugin-vue-router的完美结合

引言 在Vue3项目中&#xff0c;路由管理是构建复杂应用不可或缺的一部分。传统上&#xff0c;手动编写路由配置既繁琐又容易出错。本文将介绍如何利用unplugin-vue-router插件&#xff0c;实现Vue3项目的自动化路由配置&#xff0c;从而提升开发效率和准确性。 unplugin-vue-…

基于SpringBoot+Vue+MySQL的考研互助交流平台

系统展示 用户前台界面 管理员后台界面 系统背景 本文设计并实现了一个基于SpringBoot、Vue.js和MySQL的考研互助交流平台。该平台旨在为广大考研学子提供一个集资源共享、学习交流、经验分享、心理辅导等功能于一体的综合性在线社区。通过SpringBoot构建高效稳定的后端服务&am…

nnunetv2系列:2D实例分割数据集转换

nnunetv2系列&#xff1a;自定义2D实例分割数据集转换 这里主要参考官方源文件nnUNet/nnunetv2/dataset_conversion/Dataset120_RoadSegmentation.py&#xff0c;注释了一些不必要的操作。数据集下载链接: massachusetts-roads-dataset 重要提示: nnU-Net只能用于使用无损(或…

轻松实现游戏串流,内网穿透

一、部署Gemini Gemini使用教程 二、部署Moonlight 过程大概说一下&#xff0c;网上有太多太多moonlight的东西了 需要运行游戏的机器上安装GFE&#xff08;GeForce Experience&#xff09;&#xff0c;登录并开启GAMESTREAM&#xff08;游戏串流&#xff09;功能 注&…