管理员禁用加载解压缩的扩展名

时间:2017-04-23 12:23:41

标签: java selenium google-chrome selenium-chromedriver chrome-automation-extension

当我运行我的webdriver脚本时,我收到一个确认对话框,其中包含以下消息:

  

加载扩展程序时出错

     

无法从'C:\ Users \ username \ AppData \ Local \ Temp \ scoped_dir6312_32763 \ internal'加载扩展程序。管理员禁用加载解压缩的扩展名。

     

你想重试吗?

     

是否

单击“是”可以运行测试。

我不确定为什么我会提示此对话框,

我已经尝试了下面提到的解决方法,但它们都没有工作:

  1. 将Chrome驱动程序替换为最新版本。
  2. 在我的脚本中添加了以下代码:

    ChromeOptions options = new ChromeOptions();
    options.addArguments("no-sandbox");
    options.addArguments("disable-extensions");
    driver = new ChromeDriver(options);
    
  3. 以下是我的测试方法:

    public void Login() throws IOException{
        test = extent.startTest("Login");
        signInPage = new SignInPage(driver);
        signInPage.enterMailId();   
        String screenShotPath = GetScreenShot.capture(driver, "enterMailId");
        test.log(LogStatus.PASS, "Email id is entered successfully: " + test.addScreenCapture(screenShotPath));
        signInPage.enterpwd();
        //test.log(LogStatus.INFO, "Password is entered successfully");
        screenShotPath = GetScreenShot.capture(driver, "enterpwd");
        test.log(LogStatus.PASS, "Password is entered successfully: " + test.addScreenCapture(screenShotPath));
        signInPage.clickOnLogin();
        test.log(LogStatus.PASS, "User logged in successfully");
    }
    

    以下是调用浏览器的方法:

    private  void initChromeBrowser(){
        System.setProperty("webdriver.chrome.driver", userdir +"\\chromedriver.exe");
        ChromeOptions options = new ChromeOptions();
        options.addArguments("test-type");
        options.addArguments("no-sandbox");
        //Fix for cannot get automation extension
        options.addArguments("disable-extensions");
        options.addArguments("start-maximized");
        options.addArguments("--js-flags=--expose-gc");         
        options.addArguments("disable-plugins");
        options.addArguments("--enable-precise-memory-info"); 
        options.addArguments("--disable-popup-blocking");
        options.addArguments("--disable-default-apps");
        options.addArguments("test-type=browser");
        options.addArguments("disable-infobars");
        driver = new ChromeDriver(options);
        launchApp();
    }
    

    我的脚本中是否还有其他内容可以阻止对话框。

11 个答案:

答案 0 :(得分:10)

您可以将useAutomationExtension功能设置为false。

    ChromeOptions options = new ChromeOptions();
    options.setExperimentalOption("useAutomationExtension", false);
    WebDriver driver = new ChromeDriver(options);

此功能有助于不加载Chrome自动化扩展程序。由于这个原因,"无法加载扩展程序" 弹出窗口不会出现。

但请注意,如果没有Chrome自动化扩展程序,您将无法执行任何窗口大小调整/定位操作。

希望这有帮助!

来源:https://bugs.chromium.org/p/chromedriver/issues/detail?id=1749

答案 1 :(得分:5)

升级到ChromeDriver v2.29后,我遇到了同样的问题。我有Chrome v58.0。这看起来像一个悬而未决的问题:https://bugs.chromium.org/p/chromedriver/issues/detail?id=639#c26

根据您的版本,YMMV,在我的情况下,我不得不降级到ChromeDriver v2.27。

答案 2 :(得分:3)

此错误消息...

  

错误加载扩展程序

     

无法从'C:\ Users \ username \ AppData \ Local \ Temp \ scoped_dir6312_32763 \ internal'加载扩展名。管理员禁止加载解压缩的扩展程序。

     

您想重试吗?

     

是的

...表示未加载扩展程序,因为管理员已禁用它。

根据Issue 1749: Failed to load extention from: ... Loading of unpacked extensions is disabled by the administrator ChromeDriver 使用 Chrome自动化扩展来自动执行各种功能,例如窗口大小调整,窗口定位等。

加载扩展失败。弹出窗口表示尚未加载此扩展。如果您手动关闭弹出窗口,浏览器将正常运行, ChromeDriver 命令将继续按预期运行。但是,在这种情况下,如果您尝试执行窗口大小调整或窗口重新定位命令,则会抛出错误 unknown error: cannot get automation extension

每当组织管理策略禁止扩展时,直到 ChromeDriver v2.28 ,用户才能使用参数disable-extensions来绕过限制,如下所示:

ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-extensions");
WebDriver driver = new ChromeDriver(options);

效果很好。

ChromeDriver v2.28 及更高版本,只要测试通过disable-extensions标志, ChromeDriver 隐式地通过 disable-extensions-except 标志,依次加载 Chrome自动化扩展。此扩展程序可帮助Chromedriver执行窗口大小调整和窗口重新定位操作。

因此,如果您的组织管理员策略阻止了扩展程序,则显示弹出窗口无法从以下位置加载扩展程序:...加载未打包的扩展程序是一种预期的行为。

此问题取决于Selenium support for headless

或者,您可以将 useAutomationExtension 功能设置为false,如下所示:

ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("useAutomationExtension", false);
WebDriver driver = new ChromeDriver(options);

此功能将有助于不加载 Chrome自动化扩展,并且不会显示 Failed to load extension 弹出窗口。但是如果没有 Chrome自动化扩展程序,您将无法执行任何窗口大小调整/定位操作。

现在,Selenium support for headless被解决的 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,请参阅此discussion

替代

其他一些选择是:

  • 注册表项 ExtensionInstallWhitelist添加到白名单
  • 删除注册表项 ExtensionInstallBlacklist,其中包含具有值 * 的字符串键 1

答案 3 :(得分:2)

如果你转到chrome://version/,你可以在命令下看到:

C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-background-networking --disable-client-side-phishing-detection --disable-default-apps --disable-extensions --disable-extensions-except="C:\Users\Inno3\AppData\Local\Temp\scoped_dir80288_6333\internal" --disable-hang-monitor --disable-popup-blocking --disable-prompt-on-repost --disable-sync --disable-web-resources --enable-automation --enable-logging --force-fieldtrials=SiteIsolationExtensions/Control --ignore-certificate-errors --log-level=0 --metrics-recording-only --no-first-run --password-store=basic --remote-debugging-port=12354 --safebrowsing-disable-auto-update --start-maximized --test-type=webdriver --use-mock-keychain --user-data-dir="C:\Users\Inno3\AppData\Local\Temp\scoped_dir80288_30914" --flag-switches-begin --flag-switches-end data:,

这就是为什么它会抛出错误,我不知道它为什么会出错,可能是用户政策还是Chrome更新?

--disable-extensions-except="C:\Users\Inno3\AppData\Local\Temp\scoped_dir80288_6333\internal"

我相信这个论点是由Selenium添加的,你需要以下命令告诉selenium不要添加它。

在C#中:

chromeOptions = OpenQA.Selenium.Chrome.ChromeOptions();
chromeOptions.AddAdditionalCapability("useAutomationExtension", false);
river = new ChromeDriver(chromeOptions);
launchApp();

在Java中:

chromeOptions.AddAdditionalCapability("useAutomationExtension", false)

答案 4 :(得分:2)

//Set the system property for chrome browser location
				System.setProperty("webdriver.chrome.driver", Global.sChromeDriverPath);
				//Set the Chrome capabilities
				ChromeOptions options = new ChromeOptions();
			    options.addArguments("test-type");
			    options.addArguments("start-maximized");
			    options.addArguments("--js-flags=--expose-gc");
			    options.addArguments("--enable-precise-memory-info");
			    options.addArguments("--disable-popup-blocking");
			    options.addArguments("--disable-default-apps");
			    options.addArguments("--enable-automation");
			    options.addArguments("test-type=browser");
			    options.addArguments("disable-infobars");
			    options.addArguments("disable-extensions");
			    options.setExperimentalOption("useAutomationExtension", false);
			    Global.driver = new ChromeDriver(options);

答案 5 :(得分:2)

以下代码对我来说适合chrome驱动程序2.41和浏览器版本68.0.3440.84

public class patCheck {

  WebDriver driver;

  @Test
  public void f() {

      System.setProperty("webdriver.chrome.driver", "C:\\Users\\shirish.nagar\\Work\\Selenium\\Web\\Drivers\\chromedriver.exe");

      ChromeOptions options = new ChromeOptions();
      options.setExperimentalOption("useAutomationExtension", false);
      driver = new ChromeDriver(options);

      driver.manage().window().maximize();
      driver.get("https://www.google.com");
  }
}

它可以成功调用chrome浏览器,而不会弹出“加载管理员禁用的解压缩扩展程序”的弹出窗口

答案 6 :(得分:1)

我尝试了一些诸如删除Windows注册表中的Chrome黑名单的*条目(这是一个痛苦的黑客,因为它将被公司组策略每周逆转几次)。我终于想出了可行的解决方案。使用以下代码,弹出的“错误加载扩展”不再显示。

${options}=    Evaluate    sys.modules['selenium.webdriver'].ChromeOptions()    sys, selenium.webdriver
Call Method    ${options}    add_argument    --start-maximized
Call Method    ${options}    add_experimental_option  useAutomationExtension  ${False}
Create WebDriver    Chrome    chrome_options=${options}

答案 7 :(得分:1)

    ChromeOptions options = new ChromeOptions();
    System.setProperty("webdriver.chrome.driver", "C:\\drivers\\chromedriver.exe");

    options.setExperimentalOption("useAutomationExtension", false);
    driver = new ChromeDriver(options);

答案 8 :(得分:0)

以下代码对我有用:

将useAutomationExtension设置为false

options.setExperimentalOption("useAutomationExtension", false);

完整代码:

    System.setProperty("webdriver.chrome.driver", "C:\\Selenium Drivers\\chromedriver.exe");
    ChromeOptions options = new ChromeOptions();

    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    capabilities.setAcceptInsecureCerts(true);
    options.merge(capabilities);
    options.addArguments("--test-type");
    options.addArguments("start-maximized");
    options.addArguments("--js-flags=--expose-gc");
    options.addArguments("--enable-precise-memory-info");
    options.addArguments("--disable-popup-blocking");
    options.addArguments("--disable-default-apps");
    options.addArguments("--enable-automation");
    options.addArguments("disable-extensions");
    options.setExperimentalOption("useAutomationExtension", false);
    options.addArguments("--disable-dev-shm-usage");
    options.addArguments("--no-sandbox");
    options.addArguments("disable-infobars");
    driver = new ChromeDriver(options);
    driver.get("https://www.google.com/");

答案 9 :(得分:0)

在我的公司中,我们有一个GPO,可以使用ExtensionInstallBacklist阻止chrome上的所有扩展。 因此,为避免这种情况,我们将阻止扩展注册表项从*(全部)更改为随机值(foobar)。

为此,您可以创建具有以下内容的.reg文件:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionInstallBlacklist]
"1"="lala"

答案 10 :(得分:0)

下面的代码对我有用,另外添加了-options.setExperimentalOption(“ useAutomationExtension”,false): ...

  • System.setProperty(“ webdriver.chrome.driver”,“ chromedriver路径”);
  • ChromeOptions选项=新的ChromeOptions();
  • options.addArguments(“ test-type”);
  • options.addArguments(“开始最大化”);
  • options.addArguments(“-js-flags =-expose-gc”);
  • options.addArguments(“-enable-precise-memory-info”);
  • options.addArguments(“-disable-popup-blocking”);
  • options.addArguments(“-disable-default-apps”);
  • options.addArguments(“-enable-automation”);
  • options.addArguments(“ test-type = browser”);
  • options.addArguments(“ disable-infobars”);
  • options.addArguments(“ disable-extensions”);
  • options.setExperimentalOption(“ useAutomationExtension”,false);
  • driver.new ChromeDriver(options);
  • driver.get(您的网址);