c# - 无需 .exe 的 C# 无头浏览器
问题描述
我一直在研究使用带有 C# 代码的无头浏览器。随着 Phantom JS 的走下坡路,无头 Chrome 似乎是一条路。当我安装其中任何一个以使用 selenium 时,一个可执行文件被复制到项目中,C# 代码将调用这个 .exe 来加载无头浏览器。
我有严格的限制,使我无法从我的代码中调用 .exe,这使我无法执行此操作。我也不能从 Windows 调用任何可执行文件,所以我需要一个不能从独立可执行文件运行的无头浏览器。
我试图看看是否有可能以某种方式序列化可执行文件,让我加载它并在应用程序的内存池中运行它。从我所做的研究来看,这似乎是一件非常困难的事情,除非我要使用某种虚拟机来模拟窗口。这可能会做到,但是启动整个 VM 操作系统、运行浏览器和导航到网站的成本将花费很长时间,以至于该解决方案没有任何用处。
甚至尝试反编译可执行文件以查看是否可以创建某种 DLL 的想法似乎太过分了。我有什么办法可以让无头 chrome 浏览器或任何无头浏览器在不需要调用外部可执行文件的情况下工作。
解决方案
根据您的应用程序类型,我认为有几个选项是可能的:
运行托管无头浏览器的在线服务(或使用第 3 方服务),然后从应用程序调用您的服务。这将是一个外部依赖项,与额外成本相关,但至少您不会调用本地 .exe 文件。
如果这是一个基于 Windows 的桌面应用程序,您可以嵌入 WebBrowser 控件,使其不可见,并使用基于 IE 的自动化库,不会直接调用 Internet Explorer .exe 文件。
可能一些假浏览器引擎足以完成您的任务。从该列表中,Simple Browser看起来像是 100% 基于 C# 的实现,但不支持 Javascript。
推荐阅读
- linux - 如何将带有西里尔符号的 asciidoc 转换为 pdf?
- uipath - UIPath Automation:是否可以在 UI Path 中的云服务器中执行点击和 UI 交互?
- c - 如何从其他文件(如 C 中的头文件)调用函数?
- flutter - Flutter中如何在设备之间交换数据?
- flutter - 如何基于List制作小部件
扑 - flutter - 容器的自定义形状
- php - 在 Apache 服务器的 Codeigniter 上获取 503 服务不可用
- mysql - 带有 JOIN 的 SELECT 查询返回每行的重复项
- javascript - 如何存储数据库结果的特定列?
- java - 如何访问 TextField 并将其设置为字符串?我正在使用场景构建器和日食