通过命令行或本地脚本与浏览器JavaScript交互?

问题描述 投票:0回答:1

我们提供类似于imagemagick的浏览器页面JavaScript,可帮助人们将图像转换为不同的大小和格式。但是,它需要网页交互。

是否有可能让人们实现这种互动的自动化-无需将图像发送到我们的服务器(从而增加带宽成本和服务器负载)而不要求用户下载像Puppeteer这样的无头浏览器库?

例如,以下流程可能:

  1. 通过命令行(或本地脚本)打开Chrome到特定网页。
  2. 将图像上传到该网页。
  3. 在网页上调用脚本。
  4. 接收脚本结果并允许本地操作。

可以启动Chrome浏览器,但尚不清楚启动后是否可以与特定的浏览器窗口进行交互。

javascript google-chrome firefox browser client
1个回答
0
投票

从技术上讲应该是自动化的,但是远非如此简单。

您的问题可以分为两部分:离线处理和上传自动化。


离线处理

假设您的图像处理代码是完全在浏览器中的JavaScript(而不是调用本地库的模块化节点程序,则可以在浏览器中进行所有处理。

文件“已上传”可以在不发送任何内容到服务器的情况下进行read,处理和downloaded。处理甚至可以在background thread中进行,以保持UI响应,例如良好的进度条。

代码本身可以使用Service Worker或静态html + javascript在线托管。一旦被访问或部署,两者都可以离线打开和执行。(请注意,Chrome严格限制了静态html,包括对网络工作者的严格限制。Google希望您保持在线状态。)


上载自动化

如上所述,通过文件输入选择或拖放到浏览器中的文件可以通过页内JavaScript进行读取,但传统上我将其称为“上传”操作。

Chrome具有一些自动化扩展,最著名的是Kantu,但是由于Chrome的security restriction,它们无法处理文件上传。

因此,如果要自动选择文件,则需要使用本机的浏览器外自动化工具,例如Kantu的XModulesAutoHotkeySikuliX。存在商业解决方案,但是由于您没有无头浏览器的特殊要求,因此存在类似的限制。

  • AutoHotkey将专注于模拟键盘(打开浏览器,等待5秒钟,按Tab 10次,按Enter,等待2秒,键入文件名,按Enter,依此类推),并且可以编译为可部署的例]

  • Sikulix更强大,但分发起来也困难得多;只是Java运行时大于浏览器。

  • Kantu + XModules介于两者之间。用户将需要安装浏览器扩展,本机扩展,但是一旦完成,浏览器中的所有事情都会发生(或多或少)。

[这三种方法都涉及模拟键入文件名,因为据我所知,没有一种更简单的方法可以在用户启动的(无头的)Chrome中自动执行该文件。

图像文件的名称可以作为参数传递给AutoHotkey和Sikulix的命令行,或存储在文件中并在脚本为Kantu的情况下由脚本读取。

在这三种情况下,自动化都会模拟用户,并且现实生活中的用户不得在脚本运行时触摸计算机,否则自动化会中断。


命令行怎么样?

或者,如果您的目标是自动化而不部署浏览器,则可以考虑使其成为命令行的node.js程序,并将其打包为exe。

可分发内容比已编译的AutoHotkey重,但是活动部件少得多,因此可靠得多:

  • 独立于Chrome版本或XModules的存在。
  • 所有处理都是在自己的过程中进行,而不是劫持用户的Chrome。
  • 可以无脑执行,对于自动化非常重要。
  • 灵活的命令行参数。

因为,根据我在构建自动化脚本方面的经验,很多事情取消了GUI自动化:

  1. 异常的屏幕分辨率,浏览器缩放或操作系统缩放会破坏图像匹配或更改页面布局。
  2. 更改页面元素的浏览器扩展,例如广告拦截器。
  3. 使用热键拦截键盘输入的程序。
  4. 弹出程序,例如防病毒,Windows更新或插入CD。
  5. 意外锁,睡眠,注销,键盘上的剩余键或电源中断。
  6. 或者是一个简单的Chrome更新程序,它破坏了您所依赖的100种东西。

我的代码安全吗?

[如果您担心脚本的安全性,请不要担心。您想在客户端进行处理的那一刻,猫就掉了。

从技术上讲,您的代码受版权保护。但是祝你好运。如果要使代码不进行提取/解密/清除/不管(咳嗽),则需要将其保存在服务器上。

© www.soinside.com 2019 - 2024. All rights reserved.