正在寻找一个支持 DOM 功能并在 linux 服务器中运行 javascript 的程序,就像浏览器一样,但没有用户界面

Posted

技术标签:

【中文标题】正在寻找一个支持 DOM 功能并在 linux 服务器中运行 javascript 的程序,就像浏览器一样,但没有用户界面【英文标题】:Looking for a program, that supports DOM funtions and run javascript in linux server, just like a browser but without User Interface 【发布时间】:2018-07-28 00:27:37 【问题描述】:

目前,我在客户端浏览器中使用 highcharts 创建图表;使用 highcharts 内置导出选项将它们导出为 svg;我使用canvg从导出的svg生成png base64图像字符串;然后,我将生成的 base64 字符串发送到服务器。他们工作得很好。但是我正在寻找一个可以在linux服务器中运行Javascript的程序,这样我就可以在服务器本身中创建图表并生成png base64图像字符串并将它们存储起来以供其他用途。

我读到了PhantomJs,ZombieJs。但它们看起来都像一个无头浏览器程序(一个没有用户界面的浏览器程序),仅用于测试目的。我不知道我在这些包(PhantomJs、ZombieJs)中是否有一个选项来运行我的 javascript 程序并返回我的图像字符串。

谁能给我一个最适合我的答案?

谢谢! 杰夫林

【问题讨论】:

不清楚你在问什么!问:您希望能够运行一些 Javascript 来创建图像,显示您创建的图像,并在某个“服务器”上执行此操作,对吗?问:“服务器”到底是什么? Linux? Q:服务器如何“显示”?您是否登录到 Linux 图形桌面?就此而言,什么是“无头浏览器”(?!?) 嗨 paulsm4,我已经编辑了我的问题。请再读一遍,告诉我你是否清楚......谢谢! 你还没有回答服务器应该如何显示的问题。一种替代方法是使用渲染到 X Windows 的东西。问:a) 使用 node.js,b) 使用 web 浏览器连接到 node.js,c) 在 node.js 中使用 highcharts 和 canvg,就像你现在使用它一样,除了 d) Node.js 会导致svg 作为 HTTP 响应返回到客户端的浏览器。 node.js 将在 Linux 上运行 Javascript。不确定您还在寻找什么。 我不明白服务器应该如何显示这个问题。 A:a)很高兴使用 node.js b)我不明白 c)我无法复制和粘贴我在浏览器中创建图表时使用的相同代码,因为我使用了类似 document.createElement() 的 borwser 函数。我知道 node.js 没有浏览器功能。 d)嗯.. 【参考方案1】:

听起来您已经有了在网络浏览器中使用 Javascript 的解决方案。你只是想从 NodeJS 做同样的事情,对吗?

听起来在网络浏览器中显示结果对您来说是一个完全可以接受的解决方案(与使用 X Windows 或类似的东西相反)。对吗?

简单易懂:)

要在 NodeJS 下运行,只需做完全相同的事情。

获取您在浏览器中本地运行的 JS 代码...并将其复制/粘贴到 NodeJS 请求处理程序中。

客户端通过浏览 NodeJS Web 应用程序连接到您的服务器。

NodeJS 将 SVG 作为请求处理程序发送回浏览器的“响应”对象返回。瞧!客户端看到浏览器中显示的图表或图形。

问:听起来合理吗?

这里有几个链接可能会有所帮助:

Your First NodeJS HTTP Server

How to serve an image using nodejs

附录:

    使用npm安装highcharts-more-node

    有很多方法可以使用 NodeJS 调用图表代码,包括:

    a) require('http'):从 HTTP 请求处理程序运行您的图表代码

    b) 直接从命令行运行node

    这些选项中的任何一个都允许您以多种方式保存文件 - 无需任何“额外步骤”(就像您现在显然正在做的那样):

    另请参阅:4 different ways to save a Highcharts chart as a PNG (with and without a server)

【讨论】:

我无法复制和粘贴用于在浏览器中创建图表的相同代码,因为我使用了诸如document.createElement() 之类的浏览器功能。我知道 node.js 没有浏览器功能。 我知道您正在花时间帮助我寻找答案。但请多多包涵。我再次编辑了我的问题。请阅读一次并告诉我如果你能理解我想要做什么? 您是否在问是否可以使用您的 Javascript 代码并以最少的更改/最少的工作使其在 NodeJS 下工作?答:当然可以。您是否在问是否可以采用似乎依赖于浏览器 DOM 的代码(我不确定为什么),也可能会显示给浏览器(而不是写入文件)......并让它写一个图形文件...并在 NodeJS 中运行 ...完全没有任何变化 ...好吧,可能不是 ;)【参考方案2】:

试试puppeteer

Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制无头 Chrome 或 Chromium。它还可以配置为使用完整(非无头)Chrome 或 Chromium。

它是一个没有用户界面的浏览器,并且有 api 接口来拍摄快照或在这个浏览器中运行用户定义的 javascript。

【讨论】:

以上是关于正在寻找一个支持 DOM 功能并在 linux 服务器中运行 javascript 的程序,就像浏览器一样,但没有用户界面的主要内容,如果未能解决你的问题,请参考以下文章

如何运行另一个程序,通过stdin传递数据,并在Linux中获取其stdout输出?

Linux 运行升讯威在线客服系统:同时支持 SQL Server 和 MySQL 的实现方法

Linux 运行升讯威在线客服系统:同时支持 SQL Server 和 MySQL 的实现方法

Linux 运行升讯威在线客服系统:同时支持 SQL Server 和 MySQL 的实现方法

AWK 学习笔记

一个开源客服系统-wolive