无法从 scoped_dir6312_32763/internal 加载扩展.管理员使用 ChromeDriver Selenium 禁用了加载解压扩展
我使用 vue-cli 3 创建了一个项目,它会自动为我设置 e2ed 测试.当我尝试运行测试时,我从 chrome 中弹出一个窗口,告诉我管理员已禁用加载解压扩展".
这似乎是一个常见问题,提供了一种解决方案
错误信息为...
加载扩展出错无法从以下位置加载扩展:'C:Usersuser_nameAppDataLocalTempscoped_dir6312_32763internal'.管理员禁止加载解压的扩展.行
...表示扩展程序尚未加载,因为它已被管理员禁用.
<小时>根据讨论 无法从以下位置加载扩展:...管理员禁用加载解压扩展程序 ChromeDriver使用Chrome自动化扩展程序来自动执行各种功能,如窗口大小调整、窗口定位等.
Failed to load extension.. 弹窗表示此扩展尚未加载.如果您手动关闭弹出窗口,浏览器将正常运行,ChromeDriver 命令将继续按预期工作.但在这种情况下,如果您尝试执行窗口大小调整或窗口重新定位命令,则会抛出 unknown error: cannot get automation extension
错误.
背景
直到 ChromeDriver v2.28 每当组织管理员政策禁止扩展,绕过限制用户使用参数 disable-extensions
如下:
ChromeOptions 选项 = new ChromeOptions();options.addArguments("--disable-extensions");WebDriver driver = new ChromeDriver(options);
而且效果很好.
ChromeDriver v2.28 以后,只要 disable-extensions
标志通过测试,ChromeDriver 就会隐式通过 disable-extensions-except
标志依次加载 Chrome 自动化扩展.此扩展帮助 Chromedriver 执行窗口大小调整和窗口重新定位操作.
因此,如果您的组织管理员策略阻止扩展,则显示弹出 Failed to load extension from: ... Loading of unpacked extensions 是预期行为.
此问题依赖于 Selenium 对 headless 的支持.
<小时>解决方法
作为替代方案,您可以将 useAutomationExtension
功能设置为 false
,如下所示:
ChromeOptions 选项 = new ChromeOptions();options.setExperimentalOption("useAutomationExtension", false);WebDriver driver = new ChromeDriver(options);
此功能反过来将有助于不加载 Chrome 自动化扩展程序,并且不会出现 Failed to load extension
弹出窗口.但是如果没有 Chrome 自动化扩展程序,您将无法执行任何窗口大小调整/定位操作.
现在,Selenium 对无头的支持正在解决ChromeDriver 将不再需要此扩展程序,您不应该看到此错误/弹出窗口.
解决方案
最简单的解决方案是使用最新版本的 ChromeDriver 和 Chrome 组合在以下任一选项中:
- 如果您使用的是Chrome 73版,请下载
ChromeDriver 73.0.3683.20
- 如果您使用的是 Chrome 版本 72,请下载
ChromeDriver 2.46
或ChromeDriver 72.0.3626.69
- 如果您使用的是 Chrome 版本 71,请下载
ChromeDriver 2.46
或ChromeDriver 71.0.3578.137
- 对于旧版 Chrome,请参阅此 讨论.
另类
其他一些选择是:
- 将注册表项
ExtensionInstallWhitelist
添加到白名单 - 删除 Registry Key
ExtensionInstallBlacklist
包含字符串键 1 值*
I have created a project using vue-cli 3 which automatically set up e2ed tests for me. When I try to run the tests, I get a popup from chrome, telling me that "Loading of unpacked extensions is disabled by the administrator".
This seems to be a common problem, one solution offered elsewhere is
ChromeOptions o = new ChromeOptions();
o.addArguments("disable-extensions");
o.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(o);
Now this is Java code, but I assume there's a way to achieve the same thing in a vue.js project. However, I have no idea where to put this configuration.
解决方案This popup:
with the error message as...
Error Loading Extension
Failed to load extension from: 'C:Usersuser_nameAppDataLocalTempscoped_dir6312_32763internal'. Loading of unpacked extensions is disabled by the administrator.
OK
...implies that an extension has not been loaded as it is disabled by the administrator.
As per the discussion Failed to load extention from: ... Loading of unpacked extensions is disabled by the administrator ChromeDriver uses Chrome automation extension for automating various functions like window sizing, window positioning, etc.
The Failed to load extension.. popup means that this extension has not been loaded. If you manually close the popup, browser will act normally and ChromeDriver commands will continue to work as expected. But in this case if you try executing window resizing or window re-positioning commands, it will throw an error as unknown error: cannot get automation extension
.
Background
Till ChromeDriver v2.28 whenever an organizations admin policy forbidden extensions, to bypass the restriction users have used the argument disable-extensions
as follows:
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-extensions");
WebDriver driver = new ChromeDriver(options);
and it worked perfecto.
ChromeDriver v2.28 onwards, whenever disable-extensions
flag is passed by test, ChromeDriver implicitly passes disable-extensions-except
flag which in turn loads Chrome automation extension. This extension helps Chromedriver to perform window sizing and window re-positioning operations.
So, if your organizational admin policy blocks extensions, display of popup Failed to load extension from: ... Loading of unpacked extensions is an expected behavior.
This issue had a dependency on Selenium support for headless.
Work around
As an alternative, you can set the useAutomationExtension
capability to false
as follows:
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("useAutomationExtension", false);
WebDriver driver = new ChromeDriver(options);
This capability inturn will help to not load Chrome Automation extension and Failed to load extension
popup would not appear. But you will not be able to perform any window resizing/positioning operations without the Chrome automation extension.
Now, Selenium support for headless being resolved ChromeDriver will no longer require this extension and you shouldn't have seen this error/popup.
Solution
The simplest solution would be to use the latest version of ChromeDriver and Chrome combination among either of the following:
- If you are using Chrome version 73, please download
ChromeDriver 73.0.3683.20
- If you are using Chrome version 72, please download
ChromeDriver 2.46
orChromeDriver 72.0.3626.69
- If you are using Chrome version 71, please download
ChromeDriver 2.46
orChromeDriver 71.0.3578.137
- For older version of Chrome, please see this discussion.
Alternative
Some other alternatives are:
- Add the Registry Key
ExtensionInstallWhitelist
to whitelist - Remove the Registry Key
ExtensionInstallBlacklist
containing a string key 1 with value*
相关文章