部署ASP.NET Core无头Selenium至Azure虚拟机遇WebDriverException求助
我正尝试部署一个运行无头模式Selenium实例的ASP.NET Core项目,该项目在开发环境中运行完全正常,但部署到Azure虚拟机后持续出现以下错误:
处理请求时发生未处理的异常。
WebDriverException: Selenium Manager进程异常退出,错误码-1073740791:H:\wwwroot\myinvite.me\selenium-manager/windows/selenium-manager.exe --browser "chrome" --output json
OpenQA.Selenium.SeleniumManager.RunCommand(string fileName, string arguments)
WebDriverException: 启动进程出错:
H:\wwwroot\myinvite.me\selenium-manager/windows/selenium-manager.exe --browser "chrome" --output json
OpenQA.Selenium.SeleniumManager.RunCommand(string fileName, string arguments)
NoSuchDriverException: 无法通过Selenium Manager获取chrome
补充说明:推测这是下载/写入chromedriver到wwwroot时的权限问题(以管理员身份在PowerShell中手动运行该文件完全正常),已在wwwroot文件夹的安全选项卡中添加应用池、默认池等所有可能的允许用户,并赋予完全权限。
确认应用池身份的有效权限
即便已给wwwroot设置权限,仍需验证应用池实际运行身份(如IIS AppPool\DefaultAppPool)对H:\wwwroot\myinvite.me\selenium-manager目录的读写权限:- 找到目标文件夹,右键→属性→安全→高级→有效权限
- 选择对应应用池身份,检查是否拥有完全控制权限
- 若权限未生效,重新设置并勾选“替换子容器和对象的权限”
手动指定ChromeDriver路径
绕过Selenium Manager自动下载流程,手动下载与虚拟机Chrome版本匹配的ChromeDriver,放置到项目目录后,在代码中直接指定路径:var options = new ChromeOptions(); options.AddArgument("--headless=new"); // 替换为实际ChromeDriver路径 var driver = new ChromeDriver(@"H:\wwwroot\myinvite.me\chromedriver", options);修改Selenium Manager的驱动缓存目录
指定一个权限充足的目录作为驱动缓存路径,避免默认目录权限问题:var options = new ChromeOptions(); options.AddArgument("--headless=new"); // 设置系统临时目录作为缓存路径 options.AddAdditionalOption("se:downloads", @"C:\Temp\SeleniumDrivers"); var driver = new ChromeDriver(options);提前创建
C:\Temp\SeleniumDrivers目录,并确保应用池身份有读写权限。检查虚拟机Chrome安装状态
确认Azure虚拟机上已安装稳定版Chrome浏览器,版本需与ChromeDriver匹配。若未安装,手动下载安装后再测试。验证Selenium Manager文件权限
右键点击selenium-manager.exe→属性→安全,确保应用池身份拥有“读取和执行”权限。
内容的提问来源于stack exchange,提问作者Ahmed A. Mansour

