当前位置: 首页 > 知识库问答 >
问题:

C#Selenium ChromeDriver: GoogleChrome以管理员身份运行时失败

林承悦
2023-03-14

在将Selenium Web驱动程序C#与Chrome一起使用时,我遇到了一种常见情况:如果运行测试的进程是“以管理员身份运行”(Visual Studio或nunit3 console.exe),Chrome将无法加载。

上下文

  • OS: Windows 7 x64
  • Chrome:版本64.0.3282.167(官方构建)(64位)
  • Selenium. Chrome. WebDriver(chromedriver.exe): 2.35.0
  • 本地策略不允许chrome扩展

台阶

>

  • 启动一个测试,同时初始化驱动程序

    var options = new ChromeOptions();
    
    //TODO: check if really needed
    options.AddAdditionalCapability("useAutomationExtension", false);
    options.AddArguments("--allow-no-sandbox-job");
    options.AddArguments("--ignore-certificate-errors");
    
    var driver = new ChromeDriver(options);
    

    ChromeDriver成功启动:

    Starting ChromeDriver 2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73) on
    port 61771
    Only local connections are allowed.
    
    DevTools listening on ws://127.0.0.1:12890/devtools/browser/e50864bd-9c30-445c-a3f8-e33d6b6e5b49
    

    Chrome已打开,但无法加载选项卡

    系统”类型的例外。WebDriver中出现“InvalidOperationException”。dll,但未在用户代码中处理

    附加信息:会话未创建异常

    从tab崩溃

    (会话信息:chrome=64.0.3282.167)

    (驱动程序信息:chromeDrive=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),平台=Windows NT 6.1.7601 SP1x86_64)(昆虫证书)

    我不明白为什么它会失败。我觉得这可能与这个问题有关,但这个问题涉及另一个用户,而不是处于提升模式的同一个用户。

    问:为什么C#Selenium ChromeDriver在以管理员身份运行时Chrome失败。我如何调查此问题的根本原因?

    我已经创建了一个小的控制台应用程序,建议在评论:

    static void Main(string[] args)
    {
        var options = new ChromeOptions();
        // this is required since otherwise it will try to load some extension which is not allowed by local policy
        options.AddAdditionalCapability("useAutomationExtension", false);
        // try to catch some errors, but does not seem to work
        options.AddArguments("--enable-logging");
        options.AddArguments("--v=1");
        var driver = new ChromeDriver(options);
        driver.Navigate().GoToUrl("http://localhost");
    }
    

    在公司以外的另一台电脑上做了一些测试,不管Chrome驱动程序如何,它都能正常工作(尝试了2.35和2.36)。其他区别是操作系统(工作中的视窗7和家庭中的视窗10)和工作中的本地策略(这可能会影响Chrome设置)。

    多亏了Tarun LalwaniI,我将问题归结为似乎与“以管理员身份运行”本地策略有关的可能的Chrome问题:

    >

  • 在详细模式下运行Web驱动程序表明,当正常运行时,Chrome使用完全不同的配置文件路径,而不是作为管理员运行:

    • 正常运行:dir=“C:\Users”\

    检查chrome。在Chrome的安装文件夹中调试文件(在每个临时配置文件中还创建了一个调试文件),我看到了以下错误:

    [0303/120050.213:错误:进程_reader_win.cc(151)]SuspendThread:访问被拒绝。(0x5)
    [0303/120050.214:错误:进程_reader_win.cc(123)]n线程:{Access Denied}进程已请求访问对象,但尚未被授予这些访问权限。(0xc0000022)
    [0303/120050.215:错误:在进程中找不到异常\u snapshot\u win.cc(88)]线程ID 13672
    [0303/120050.215:警告:崩溃报告\u异常\u handler.cc(62)]进程SnapshotWin::初始化失败

    C:\Program Files(x86)\Google\Chrome\Application

    所以,至少现在我知道这与作为管理员开始的Chrome有关,而与Chrome驱动程序无关。


  • 共有1个答案

    黄兴业
    2023-03-14
    匿名用户

    我设法使用--no-沙盒选项绕过了这个问题。虽然它在我的例子中有效,但我对这个解决方案不满意,因为no-沙盒不是一个推荐的选项。

    我的最终最低工作代码:

    var options = new ChromeOptions();
    options.SetLoggingPreference(LogType.Driver, LogLevel.All);
    options.AddAdditionalCapability("useAutomationExtension", false);
    options.AddArguments("--no-sandbox");
    var driver = new ChromeDriver(options);
    driver.Navigate().GoToUrl("http://localhost");
    

    不是解决方案的一部分,但它在尝试无沙盒选项时提供了帮助。

    [17532:18272:0301/225923.296:错误:gpu_process_transport_factory.cc(1009)]丢失了UI共享上下文。

    在进一步挖掘之后,我找到了一个简单而体面的解决方案:启动chromedriver。exe没有提升,并使用RemoteWebDriver而不是ChromeDriver连接到它(感谢Tarun Lalwani指出了这种模式):

    var options = new ChromeOptions();
    options.SetLoggingPreference(LogType.Driver, LogLevel.All);
    options.AddAdditionalCapability("useAutomationExtension", false);
    var driver = new RemoteWebDriver(new Uri("http://localhost:9515"), options);
    driver.Navigate().GoToUrl("http://localhost");
    

     类似资料:
    • 问题内容: Java中是否有一种方法可以要求系统控制管理员功能。当然不做:右键单击exe->以admin身份运行。 我想要的是UAC提供的框架,例如Windows Vista或Windows 7。 还是在从jar中制作exe时进行一些设置? 问题答案: 你必须创建一个清单文件,该清单文件指定你的应用程序需要管理员权限。你可以将清单包含在exe中,也可以将其保留为单独的文件(yourapp.exe.

    • 本文向大家介绍c#通过app.manifest使程序以管理员身份运行,包括了c#通过app.manifest使程序以管理员身份运行的使用技巧和注意事项,需要的朋友参考一下 微软在Windows Vista开始引入了UAC(用户帐户控制)新技术(点击这儿了解什么是UAC)。当程序执行时需要权限的话,UAC会弹出警告消息:让用户确认是否同意允许这个程序改变你的计算机配置,windows需要得到你的许可

    • 问题内容: 我正在开发一个小型关机计划程序项目,在该项目中,我必须将计算机置于模式下。我正在使用的命令是 此命令需要管理员权限,我不知道该如何获得。另外,在搜索以前的答案时,我发现我可以用作 正在执行任务,但正在浪费太多时间,即使软件变慢。还有其他快速方法吗?我正在使用Netbeans IDE。 问题答案: 您有几种选择 A.使用admin priv创建快捷方式。 快捷方式将运行 您的Java代码

    • 问题内容: 到目前为止,我已经制作了一个Java应用程序,并在我的PC和铸造的PC中对其进行了测试。但是当我将我的应用程序“安装”到他的PC上时,该应用程序是我的另一个有迪斯科舞厅的朋友( Windows Vista 32位)无法正常工作,然后我继续搜索并发现问题是特权…我安装了Vista 32位和XP 32位虚拟机进行一些测试,我我无法使用管理员权限来运行我的应用程序。 有什么方法可以创建批处理

    • 本文向大家介绍C#中用管理员身份运行程序代码实例,包括了C#中用管理员身份运行程序代码实例的使用技巧和注意事项,需要的朋友参考一下

    • 问题内容: 我正在用Java编写安装程序,因此将需要提升的权限才能访问Program Files目录。根据我在网上找到的信息,我编写了如下的实现: 我用来检查特权的测试与此处找到的答案略有不同,看起来像这样: 当我运行它时,它没有按预期方式进行特权测试,并调用了exec。通过查看来检查该呼叫是否有效,表明该过程实际上仍然有效。但是,我没有看到任何有关新过程的证据,Windows也没有提示我授予权限