我们提供类似于imagemagick的浏览器页面JavaScript,可帮助人们将图像转换为不同的大小和格式。但是,它需要网页交互。
是否有可能让人们实现这种互动的自动化-无需将图像发送到我们的服务器(从而增加带宽成本和服务器负载)和而不要求用户下载像Puppeteer这样的无头浏览器库?
例如,以下流程可能:
可以启动Chrome浏览器,但尚不清楚启动后是否可以与特定的浏览器窗口进行交互。
从技术上讲应该是自动化的,但是远非如此简单。
您的问题可以分为两部分:离线处理和上传自动化。
离线处理
假设您的图像处理代码是完全在浏览器中的JavaScript(而不是调用本地库的模块化节点程序,则可以在浏览器中进行所有处理。
文件“已上传”可以在不发送任何内容到服务器的情况下进行read,处理和downloaded。处理甚至可以在background thread中进行,以保持UI响应,例如良好的进度条。
代码本身可以使用Service Worker或静态html + javascript在线托管。一旦被访问或部署,两者都可以离线打开和执行。(请注意,Chrome严格限制了静态html,包括对网络工作者的严格限制。Google希望您保持在线状态。)
上载自动化
如上所述,通过文件输入选择或拖放到浏览器中的文件可以通过页内JavaScript进行读取,但传统上我将其称为“上传”操作。
Chrome具有一些自动化扩展,最著名的是Kantu,但是由于Chrome的security restriction,它们无法处理文件上传。
因此,如果要自动选择文件,则需要使用本机的浏览器外自动化工具,例如Kantu的XModules,AutoHotkey或SikuliX。存在商业解决方案,但是由于您没有无头浏览器的特殊要求,因此存在类似的限制。
AutoHotkey将专注于模拟键盘(打开浏览器,等待5秒钟,按Tab 10次,按Enter,等待2秒,键入文件名,按Enter,依此类推),并且可以编译为可部署的例]
Sikulix更强大,但分发起来也困难得多;只是Java运行时大于浏览器。
Kantu + XModules介于两者之间。用户将需要安装浏览器扩展,和本机扩展,但是一旦完成,浏览器中的所有事情都会发生(或多或少)。
[这三种方法都涉及模拟键入文件名,因为据我所知,没有一种更简单的方法可以在用户启动的(无头的)Chrome中自动执行该文件。
图像文件的名称可以作为参数传递给AutoHotkey和Sikulix的命令行,或存储在文件中并在脚本为Kantu的情况下由脚本读取。
在这三种情况下,自动化都会模拟用户,并且现实生活中的用户不得在脚本运行时触摸计算机,否则自动化会中断。
命令行怎么样?
或者,如果您的目标是自动化而不部署浏览器,则可以考虑使其成为命令行的node.js程序,并将其打包为exe。
可分发内容比已编译的AutoHotkey重,但是活动部件少得多,因此可靠得多:
因为,根据我在构建自动化脚本方面的经验,很多事情将取消了GUI自动化:
我的代码安全吗?
[如果您担心脚本的安全性,请不要担心。您想在客户端进行处理的那一刻,猫就掉了。
从技术上讲,您的代码受版权保护。但是祝你好运。如果要使代码不进行提取/解密/清除/不管(咳嗽),则需要将其保存在服务器上。