我刚刚为我们的应用程序创建了一个功能,该功能根据给定用户在我们系统中的数据生成PowerPoint报告。
简而言之,服务器使用Selenium的ChromeDriver生成了一个Google chrome实例,并从那里从我们在chrome中运行的应用程序中删除图表。这样做是为了确保报表中的图表看起来与它们在客户端浏览器中显示的完全相同。
我们使用 Azure Web 应用来托管我们的开发和生产环境,虽然我的报告功能在本地环境中运行良好,但一旦部署到任何其他环境,它就不起作用,因为它取决于安装的 chrome,并且我无法将其安装在Azure Web 应用沙盒环境中。 (你可以看到我的另一个问题,以参考哪里出了问题:PowerShell StartProcess:无效句柄(
所以
我非常想知道的是,如果Azure Web App环境不允许我安装谷歌浏览器,我下一步应该在哪里看?
看起来使用Service Fabric可能允许我适当地安装我需要的东西 (https://learn.microsoft.com/en-us/azure/app-service/choose-web-site-cloud-service-vm(,但为了能够促进功能的这一小部分,这似乎是一个很大的改变。
另一种选择是重新构建该功能,这样它就不依赖于生成谷歌浏览器实例的服务器......但如果有一种简单的方法让我得到我的工作,我宁愿避免这种情况。
理想情况下,只有一种方法可以在给定的环境中安装谷歌浏览器,但是我已经花了10个小时试图让它现在发生,而且看起来并不乐观。
有几个解决方案可以工作 - 具体取决于您的代码和框架依赖项。
IMO - 最简单的方法是在 docker 容器(运行 Selenium ChromeDriver(中构建代码,并通过 Web App 上的容器功能部署它,或者通过 ACI(Azure 容器实例(按需运行它,并让它创建报告并将其放在 Azure 存储中。在容器中,您有更多的选择 - 并且您有很多关于如何运行它的选择。按需启动 ACI 以完成工作可以通过多种方式完成(例如,从代码或通过逻辑应用或 Powershell/Azure 自动化(。
下面是有关在应用服务中运行容器的一些链接:
https://learn.microsoft.com/en-us/azure/app-service/containers/
https://learn.microsoft.com/en-us/azure/app-service/containers/tutorial-custom-docker-image
您可以从此图像构建和添加代码开始:https://github.com/SeleniumHQ/docker-selenium
当然还有其他替代方案 - 您可以拥有一个可以安装并按需执行所需操作的 VM - 但是 - 这会增加更多的管理开销和其他需要考虑的影响。
许多选项 - 但在 Web 应用程序沙盒中 - 您是有限的。
我发现自己在Chrome驱动程序上遇到了这个问题.exe需要一个真正的Chrome。由于我无法在 Azure 应用服务中安装 Chrome,因此我正在尝试便携式版本的 Chrome。使用chrome网络驱动程序时,我会告诉它在哪里可以找到chrome二进制文件。
var options = new ChromeOptions();
options.AddArguments("headless"); // any options you need
options.BinaryLocation = "YOUR CHROME BINARY PATH HERE";
var driver = new ChromeDriver("YOUR CHROME DRIVER PATH HERE", options);
您应该能够复制chrome便携式文件,因为不需要安装。虽然它很重,但 250 MB,因为它里面包括非便携式版本。
请务必按照文档中的说明使用与您的 ChromeDriver 兼容的 Chrome 版本