我正在研究以编程方式控制 Chrome/Chromium 实例的可靠方法,以利用其在 Node.js/C#/Java 应用程序中呈现网页的功能。简而言之,我想做的事情如下:
- 打开/关闭浏览器窗口。
- 最小化、最大化浏览器窗口。
- 导航到某个 URL。
- 设置饼干。
更清楚地说:我需要一个有头的浏览器来向最终用户显示网页。它可以嵌入到我的应用程序中,也可以是独立的浏览器(例如单独发布的 Chromium 实例)。
我无法从 Node.js/C#/Java 环境中找到有关 Chrome/Chromium 中任何公共 API 的信息。可用于 Chrome 扩展的那些不适用于我的项目,因为我想从外部控制浏览器,例如 Selenium WebDriver。到目前为止,我找到了以下方法来按照我需要的方式控制浏览器:
- 使用 Puppeteer/WebDriver API。
- 使用 chrome-remote-interface NodeJS 库。
- 依靠 Chrome 嵌入式框架功能。
- 依赖 Electron.js 的能力。
- 构建我自己的库,以某种方式包含 Chromium 模块作为依赖项(例如,类似于 Electron 团队实现的)。
从最终利用 Chrome Devtools 协议的所有提到的库的角度来看,前两个选项是相似的。CDP 被淘汰/弃用的风险对我们的项目来说是相当大的。另一个问题是 CDP 的目的是调试和测试自动化,而不是应用程序开发。此外,在用户机器上打开 Chrome 中的开放调试端口似乎很容易受到攻击。
由于依赖于嵌入式 Chromium 更新节奏,CEF 和 Electron 路径让我很担心。尽管 Electron 团队的目标是更新 Chromium 的所有其他版本,但由于无法在带有安全补丁的新版本发布后立即更新 Chromium 版本,它仍然可能是一个安全问题。此外,如果我需要真正的浏览器体验(就是这种情况),我不会开箱即用,我必须自己实现按钮、标签、地址栏等浏览器功能。
选项#5 的实现似乎极其复杂,因为它似乎需要团队在 Chromium 内部、C++ 开发和 C++ 构建工具方面的能力。
我在选项列表中遗漏了什么?我在假设中遗漏了什么?任何提示,想法,建议将不胜感激!