【问题标题】:Error Loading Extension Could not load extension from 'C:\..\Local\Temp\scoped_dir6312_32763\internal'. Loading of unpacked extensions is disabled加载扩展时出错无法从“C:\..\Local\Temp\scoped_dir6312_32763\internal”加载扩展。已禁用加载未打包的扩展
【发布时间】:2017-09-20 03:11:55
【问题描述】:

当我运行我的 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);
    

下面是我的测试方法:

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();
}

我是否应该在我的脚本中加入任何其他内容以防止出现该对话框。

【问题讨论】:

  • 您使用的是哪个版本的 Selenium、驱动程序和浏览器?你的测试步骤是什么?什么对你有用?显示代码。你被困在哪里了?

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


【解决方案1】:

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

根据您的版本,YMMV,就我而言,我不得不降级到 ChromeDriver v2.27。

【讨论】:

  • 谢谢,降级到 v2.27 解决了我的问题,但现在遇到以下错误:org.openqa.selenium.WebDriverException: unknown error: cannot get automation extension from unknown error: page could not be found: chrome-extension://aapnijgdinlhnhlmodcfapnahmbfebeb/_generated_background_page.html 对此有任何想法吗?
【解决方案2】:

您可以将 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

【讨论】:

  • 我们在哪里添加这段代码?我的 .side 文件中没有 C# 或 Java 代码
  • 如果有人偶然发现这个正在寻找 WebdriverIO 配置,那么您可以在wdio.conf.jscapabilities 部分中进行此更改:browserName: 'chrome', 'goog:chromeOptions': {"useAutomationExtension": false},
  • 这个答案也适用于 NightwatchJS。在您的 nightwatch.json 配置文件中,执行:{"test_settings":{"default":{"desiredCapabilities":{"browserName":"chrome","goog:chromeOptions":{"useAutomationExtension":false}}}}}
【解决方案3】:

如果你去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)

【讨论】:

  • 这就像一个魅力!感谢您提供 C# 和 Java 的示例,因为其中一些答案不适用于我。
  • 是的 - 对于 C# 上面的“chromeOptions.AddAdditionalCapability("useAutomationExtension", false);"是我所需要的,其他建议在 OpenQA.Selenium 场景中不起作用。谢谢。
【解决方案4】:

//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);

【讨论】:

  • 通过使用上述代码,您可以在 selenium 自动化 Chrome 驱动程序版本 - ChromeDriver 2.34 Chrome 浏览器版本 - 63.0.39 中成功禁用弹出窗口和午餐 chrome 驱动程序
【解决方案5】:

我尝试了很多方法,例如在 Windows 注册表中删除 Chrome 黑名单的 * 条目(这是一个痛苦的 hack,因为公司组策略每周会撤销几次)。我终于想出了可行的解决方案。使用以下代码,“错误加载扩展”弹出窗口不再出现。

${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}

【讨论】:

    【解决方案6】:

    以下代码适用于我的 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浏览器,没有弹出“正在加载解压的扩展被管理员禁用”

    【讨论】:

      【解决方案7】:
          ChromeOptions options = new ChromeOptions();
          System.setProperty("webdriver.chrome.driver", "C:\\drivers\\chromedriver.exe");
      
          options.setExperimentalOption("useAutomationExtension", false);
          driver = new ChromeDriver(options);
      

      【讨论】:

      • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
      【解决方案8】:

      此错误消息...

      加载扩展出错

      无法从“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 自动化扩展 来自动化各种功能,如窗口大小调整、窗口定位等。

      Failed to load extension.. 弹窗表示此扩展尚未加载。如果您手动关闭弹出窗口,浏览器将正常运行,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 执行窗口大小调整和窗口重新定位操作。

      因此,如果您的组织管理员政策阻止扩展,则显示弹出 Failed to load extension from: ... Loading of unpacked extensions 是预期的行为。

      这个问题依赖于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 将不再需要此扩展程序,您不应该看到此错误/弹出窗口。

      解决方案

      最简单的解决方案是使用最新版本的 ChromeDriverChrome 组合在以下任一选项中:

      • 如果您使用的是Chrome 73版,请下载ChromeDriver 73.0.3683.20
      • 如果您使用的是Chrome 72版,请下载ChromeDriver 2.46ChromeDriver 72.0.3626.69
      • 如果您使用的是Chrome 71版,请下载ChromeDriver 2.46ChromeDriver 71.0.3578.137
      • 对于旧版 Chrome,请参阅discussion

      另类

      其他一些选择是:

      • 注册表项 ExtensionInstallWhitelist 添加到白名单
      • 删除 注册表项 ExtensionInstallBlacklist 包含字符串键 1 和值 *

      【讨论】:

      • 删除注册表项 ExtensionInstallBlacklist,其中包含一个值为 * 的字符串键 1,成功!谢谢
      【解决方案9】:

      以下代码对我有用:

      将 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/");
      

      【讨论】:

        【解决方案10】:

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

        为此,您可以使用以下内容创建一个 .reg 文件:

        Windows 注册表编辑器版本 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionInstallBlacklist] "1"="拉拉"

        【讨论】:

          【解决方案11】:

          下面的代码适用于我添加 - options.setExperimentalOption("useAutomationExtension", false) : ...

          • System.setProperty("webdriver.chrome.driver", "chromedriver path");
          • ChromeOptions 选项 = 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);
          • driver.new ChromeDriver(options);
          • driver.get(你的网址);

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-03-06
            • 2018-01-22
            • 2012-11-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多