【问题标题】:Disable developer mode extensions pop up in Chrome禁用开发者模式扩展在 Chrome 中弹出
【发布时间】:2014-05-28 03:37:08
【问题描述】:

自上周最新发布的 chrome (34.0.1847.116) 以来,我在使用 watir-webdriver 运行自动化测试时收到“禁用开发者模式扩展”。

这似乎是令人反感的扩展,但考虑到 chromedriver 使用它,这对我来说是一个潜在的危险扩展,这对我来说没有任何意义。

任何找到解决此问题的人,因为我无法回滚到以前的版本或找到旧版本的安装程序来回滚,这对我的测试造成了严重破坏。

【问题讨论】:

  • 使用外部点击杀死弹出窗口:stackoverflow.com/a/29376532/285594
  • @artdias90 不工作了,他也不想更新了(维护2年也可以理解)。
  • 弹出窗口显示后,使用机器人类型按 esc 按钮。 Robot robot; try { robot = new Robot(); robot.keyPress(KeyEvent.VK_ENTER); // confirm by pressing Enter in the end robot.keyRelease(KeyEvent.VK_ENTER); } catch (AWTException e) { printStackTraceToString(e); }
  • 旁注:Vivaldi 浏览器与大多数 chrome 扩展兼容,不会发出此警告

标签: google-chrome google-chrome-extension watir-webdriver selenium-chromedriver


【解决方案1】:

无法禁用。引用:"Sorry, we know it is annoying, but you the malware writers..."

您唯一的选择是:使您的自动化测试适应这种新行为,或者将有问题的脚本上传到 Chrome 网上应用店(可以以“不公开”的方式完成)。

【讨论】:

  • 我无法在网上商店中使用我的扩展程序/应用程序有数千个原因,我需要在本地运行它。这是 Google Chromium 团队的一个非常邪恶的实现,非常邪恶,有知识的人应该与 Chromium 辩论并修复它。可怕的问题,严重不被欣赏。这个问题的所有答案对于从事信息亭项目的人来说只是过度杀戮。它的噩梦。请通知/敲门/与铬社区辩论以解决此问题。
  • 无法再使用 Chrome 开发任何东西只是时间问题 :)
  • 是的,这是因为恶意软件...我们并不想惹恼那些使用我们在商店中屏蔽的扩展程序(例如 Dissenter)的人...
  • 我需要添加自定义清单密钥并不能上传到网上商店。
【解决方案2】:

不幸的是,由于在 iphone 模式下使用浏览器的宽度限制,我无法自动将其设置为开发人员模式。我现在找到了一个危险的解决方法,安装 chrome 的开发通道版本。它没有警告信息,但我敢肯定,从长远来看,当引入问题时,它会给我带来更多问题。仍然希望给我几天的时间来找到解决方法。

【讨论】:

  • 您也可以使用beta channel。它比 dev 更稳定。同时,它比稳定频道有更多的功能。
  • @RobW asargent 说弹出窗口也出现在 beta 频道中。那是错的吗? code.google.com/p/chromium/issues/detail?id=337734#c2
  • @rsanchez 刚刚在 Windows 上试过,你是对的。感谢您的指正。我使用的是 Linux,所以我没有遇到这个问题(:
  • 这不再有效:blog.chromium.org/2015/05/…
  • @RobW 你能发布关于这个错误的更新吗? (这是Restrict-AddIssueComment-EditIssue
【解决方案3】:

在创建 chrome 驱动程序时,使用选项禁用它。 它无需任何扩展即可工作。

使用下面的代码sn-p

ChromeOptions options = new ChromeOptions();
options.addArguments("chrome.switches","--disable-extensions");
System.setProperty("webdriver.chrome.driver",(System.getProperty("user.dir") + "//src//test//resources//chromedriver_new.exe"));
driver = new ChromeDriver(options);

【讨论】:

  • 我们应该在哪里写这个?
  • 将它添加到我的 Protractor conf.js 文件参数列表中并且有效。非常感谢:)
  • 这很好用。在 C# 中,代码为:options.AddArgument("--disable-extensions");
  • 今天,我不得不使用options.AddArguments("chrome.switches", "--disable-extensions --disable-extensions-file-access-check --disable-extensions-http-throttling"); 而不仅仅是`--disable-extensions。我认为可以省略其中一个附加开关,但不能同时省略。
  • 你能为凡人解释一下吗?那个脚本是什么,或者放在哪里......
【解决方案4】:

基于 Ruby 的 watir-webdriver 使用类似这样的东西:

browser=Watir::Browser.new( :chrome, :switches => %w[ --disable-extensions ] )

【讨论】:

    【解决方案5】:

    禁用扩展设置对我不起作用。相反,我使用Robot 类来单击取消按钮。

    import java.awt.Robot;
    import java.awt.event.InputEvent;
    
    public class kiosk {
      public static void main(String[] args) {
        // As long as you don't move the Chrome window, the Cancel button should appear here.
        int x = 410;
        int y = 187;
    
        try {
          Thread.sleep(7000);// can also use robot.setAutoDelay(500);
          Robot robot = new Robot();
          robot.mouseMove(x, y);
          robot.mousePress(InputEvent.BUTTON1_MASK);
          robot.mouseRelease(InputEvent.BUTTON1_MASK);
          Thread.sleep(3000);// can also use robot.setAutoDelay(500);
        } catch (AWTException e) {
          System.err.println("Error clicking Cancel.");
          e.printStackTrace();
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    }
    

    【讨论】:

    • 这个答案被低估了,因为它可以适应其他恼人的不可避免的 GUI 按钮点击任务。
    • @momomo 显然它可以在配置或其他东西中设置,但这只是示例代码。
    【解决方案6】:

    截至May 2015 Windows 上的 Chrome beta/dev/canary(参见第 75-78 行)始终显示此警告。

    • 我刚刚使用 hiew32 演示版修补了 chrome.dll(开发通道,32 位):运行它,切换到十六进制视图(Enter 键),搜索 ExtensionDeveloperModeWarning( F7)然后按F6找到引用代码,到附近的INC EAX行,后面是RETN,按F3编辑,输入90而不是40,将呈现为NOP(没有-op),保存(F9)。

    • @Gsx 发现的简化方法,也适用于 64 位 Chrome 开发人员:

      1. 运行 hiew32 演示(在管理员模式下)并打开 Chrome.dll
      2. 切换到十六进制视图(Enter 键)
      3. 搜索 ExtensionDeveloperModeWarning (F7)
      4. F3 编辑第一个字母“E”并将其替换为任何其他字符
      5. 保存 (F9)。
    • patch.BAT脚本

    当然,这只会持续到下一次更新,所以经常需要它的人可能会编写一个自动修补程序或启动器来修补内存中的 dll。

    【讨论】:

    • 嗨,我正在尝试使用 hiew32demo 对其进行修补,但我无法这样做。当我打开 chrome.dll 时,我得到Hiew Demo doesn't support NE/LX/LE/NLM/ELF/PE64 files,但我可以跳过该警告。然后我用 F4 更改模式以解码和搜索 ExtensionDeveloperMo 因为 _ExtensionDeveloperModeWarning _ 不适合。找到它后,我按 F6 但我得到Target not found。你能帮帮我吗?
    • 我在 chrome.dll 中找不到“4578 7465 6e73 696f 6e44 6576”(“ExtensionDev”)。这个方法还能用吗?
    • Gsx,我的方法适用于开发通道上的 32 位 Chrome。
    • Emerson,这个改动一周前才登陆 Dev 频道,所以不在 Stable 中。您必须通过分析之前版本的源代码来找到相关的地方。
    • @wOxxOm 这也失败了,但我找到了一个奇怪的方法 XD。我搜索了 ExtensionDeveloperMo 并将其更改为 EXtensionDeveloperMo 并且似乎有效。
    【解决方案7】:

    我遇到了同样的问题,我尝试了以下方法:

    1. 打包解压后的扩展
    2. 关闭开发者模式
    3. 从打包的扩展中拖放 .crx 文件
    4. 关闭 Chrome,然后重新打开。

    需要注意的几点:

    • .pem 文件应与 .crx 一起保存
    • 不要将 .crx 和 .pem 放在解压后的扩展文件夹中。

    当我重新打开 Chrome 时,我收到一个弹出窗口,告诉我新打包的扩展程序,所以我重新启动了 Chrome 以查看它是否会再次这样做,但它没有。

    我希望这个解决方案有效!

    【讨论】:

    • 使用您的方法后,我得到了“不支持的扩展弹出窗口”。有关如何禁用它的详细信息,请参阅my answer
    • 我收到“无法从此网站添加应用程序、扩展程序和用户脚本”。
    【解决方案8】:

    禁用弹出窗口的official way是这样的:

    1. 打包你的扩展:转到chrome://extensions,检查开发者模式并点击打包扩展

    2. 通过将.crx文件拖放到chrome://extensions页面来安装扩展。

    如果您此时尝试重新启动 Chrome,您将收到“不支持的扩展程序已禁用”弹出窗口。

    那么对于 Windows 7 或 Windows 8:

    1. 下载 Chrome 组策略模板here
    2. 复制[zip]\windows\admx\chrome.admxc:\windows\policydefinitions
    3. [zip]\windows\admx\[yourlanguage]\chrome.adml复制到c:\windows\policydefinitions\[yourlanguage]\chrome.adml(不是c:\windows\[yourlanguage]
    4. 在 Chrome 中,转到扩展页面:chrome://extensions
    5. 检查开发者模式
    6. 向下滚动已禁用扩展程序的列表并记下要启用的扩展程序的 ID。
    7. 点击开始 > 运行,输入gpedit.msc并点击回车
    8. 点击用户配置 > 管理模板 > Google Chrome > 扩展
    9. 双击配置扩展安装白名单策略
    10. 选择Enabled,然后点击Show
    11. 在列表中,输入您在第 7 步中记下的扩展程序的 ID
    12. 点击确定并重启Chrome。

    就是这样!

    编辑:自 2018 年 7 月起,这种方法不再有效:Google 似乎已停止尊重“白名单”。

    编辑 2:截至 2018 年 12 月,此方法适用于 Chrome Version 69.0.3497.100 (Official Build) (64-bit)

    1. chrome://extensions中暂时启用开发者模式

    2. 使用 Load unpacked 卸载导致弹出窗口的扩展。

    3. 点击Pack extension,找到并选择包含扩展文件的文件夹。 如果没有私钥文件,请勿输入。

    4. 单击包扩展。将在扩展的根目录附近创建一个.crx.pem 文件。使用.crx 文件安装扩展,并确保.pem 文件安全。

    5. .crx安装的扩展ID复制到白名单并重启Chrome。

    弹出窗口应该消失了。

    【讨论】:

    • @Ryan 这些策略模板的主页似乎是chromium.org/administrators/policy-templates 此站点定期更新(最后一次更新是在 54 分钟前)。我在 6 月 24 日使用了这种方法,并且该配置适用于今天最新的 Chrome 版本。如果您更喜欢 «Can't be disabled» 作为官方版本 - 这是您的选择;)
    • 我通过 Selenium Chrome 驱动选项解决了这个问题,请参阅 here
    • @Antony Hatchkins 我使用了来自这个答案stackoverflow.com/questions/30287907/… 的更新代码,它又开始工作了。感谢您的反应!
    • 我的 Windows 是家庭高级版,我没有 gpedit.msc :/
    • 适用于我的 Chrome 58.0.3029.81,Win 7 x64 :) 希望这个解决方案能够持续!
    【解决方案9】:

    将 selenium 与 Python 一起使用,您可以在禁用扩展的情况下启动驱动程序,如下所示:

    from selenium import webdriver
    options = webdriver.chrome.options.Options()
    options.add_argument("--disable-extensions")
    driver = webdriver.Chrome(chrome_options=options)
    

    不会弹出“禁用开发者模式扩展”的弹出窗口。

    【讨论】:

    • OP 询问如何禁用弹出窗口,您改为禁用他的扩展。 ://
    【解决方案10】:

    对于使用WebdriverIO 的任何人,您可以通过创建这样的客户端来禁用扩展:

    var driver = require('webdriverio');
    var client = driver.remote({
        desiredCapabilities: {
            browserName: 'chrome',
            chromeOptions: {
                args: [
                    'disable-extensions'
                ]
            }
        }
    });
    

    【讨论】:

    • OP 没有使用 WebDriverIO。此外,OP 要求禁用弹出窗口,但您改为禁用扩展。
    【解决方案11】:

    我不确定这是否仍然是人们的问题。但是,我通读了这篇文章和其他几篇文章,最后尝试了一下,并能够使用此代码使其在 C# 中工作。我从这篇文章中得到了这一切,可能还有一些与这篇文章相关的文章。

    我希望这会有所帮助,它确实解决了我在 C# 控制台应用程序中遇到的问题。

    使用版本 52.0.2743.116 m 的 Chrome Selenium 2.9 服务器驱动

            var chromeService = ChromeDriverService.CreateDefaultService(@"C:\Selenium\InstalledServerDrivers\");
            var options = new ChromeOptions();
    
            options.AddArgument("--disable-extensions");                                      
            IWebDriver driver = new ChromeDriver(chromeService, options);
    
            driver.Url = "http://www.google.com/";
    

    【讨论】:

    • 像魅力一样工作(C# WebDriver 2.53.1.0、ChromeDriver 2.20.353145、Win7 x64)
    【解决方案12】:

    (回复安东尼·哈奇金斯)

    这是当前设置 Chrome 政策的官方方式: https://support.google.com/chrome/a/answer/187202?hl=en

    Windows 和 Linux 模板,以及通用策略 所有操作系统的文档,可以在这里找到: https://dl.google.com/dl/edgedl/chrome/policy/policy_templates.zip(压缩文件 Google Chrome 模板和文档)

    Windows 使用说明(附上我的补充):

    打开您下载的 ADM 或 ADMX 模板:

    • 从之前下载的“policy_templates.zip”(例如“policy_templates.zip\windows\adm\en-US\chrome.adm”)中提取您选择的语言的“chrome.adm”。 em>
    • 导航至开始 > 运行:gpedit.msc。
    • 导航到本地计算机策略 > 计算机/用户配置 > 管理模板。
    • 右键单击管理模板,然后选择添加/删除模板。
    • 通过对话框添加“chrome.adm”模板。
    • 完成后,经典管理模板 (ADM) / Google / Google Chrome 文件夹将出现在管理模板下。
    • 无论是在计算机配置还是用户配置下添加模板,设置都会出现在这两个地方,因此您可以在机器级别或用户级别配置 Chrome。

    完成此操作后,从Antony Hatchkins' answer 的第 5 步继续。添加扩展程序 ID 后,您可以通过打开 chrome://policy(搜索 ExtensionInstallWhitelist)来检查该策略在 Chrome 中是否有效。

    【讨论】:

    • 谢谢黑豹。通过对话框添加“chrome.adm”模板,并得到此错误:[strings] sectin 中的以下条目太长,已被截断。接下来是一页西里尔文?
    • 使用@自动通知其他用户您的帖子(如@Panther)。
    • @SteveStaple 抱歉,但我不知道导致此类问题的原因是什么。 :( 我不是这方面的专家,只是按照我链接的页面上的说明进行操作。幸运的是它对我有用。
    【解决方案13】:

    1) 等待弹出气球出现。

    2) 打开一个新标签。

    3) 关闭新标签页。弹出窗口将从原始选项卡中消失。

    一个小的 Chrome 扩展程序可以自动执行这些步骤:

    manifest.json

    {
      "name": "Open and close tab",
      "description": "After Chrome starts, open and close a new tab.",
      "version": "1.0",
      "manifest_version": 2,
      "permissions": ["tabs"],
      "background": {
        "scripts": ["background.js"], 
        "persistent": false
      }
    }
    

    background.js

    // This runs when Chrome starts up
    chrome.runtime.onStartup.addListener(function() {
    
      // Execute the inner function after a few seconds
      setTimeout(function() {
    
        // Open new tab
        chrome.tabs.create({url: "about:blank"});
    
        // Get tab ID of newly opened tab, then close the tab
        chrome.tabs.query({'currentWindow': true}, function(tabs) {
          var newTabId = tabs[1].id;
          chrome.tabs.remove(newTabId);
        });
    
      }, 5000);
    
    });
    

    安装此扩展程序后,启动 Chrome 并在弹出窗口出现之前立即切换应用程序...几秒钟后,弹出窗口将消失,当您切换回 Chrome 时将看不到它。

    【讨论】:

    • (Bonus tip 1) 使用 Selenium 时可以立即打开一个新窗口,在新窗口中等待弹出窗口,然后关闭新窗口以关闭弹出窗口. stackoverflow.com/a/36507179/3345375
    • (额外提示 2) 您也可以试试这个:添加标志 --enable-automation 以避免弹出窗口。
    • 这对我不起作用。 Win 10,Chrome 是最新的。按照步骤操作后,弹出窗口仍然存在。
    • @freginold 为了弄清楚什么是有效的,我不得不尝试各种打开和关闭选项卡/窗口的顺序。其他操作系统和浏览器版本的顺序可能不同。
    • @jkdev 命令行开关--enable-automation 有它自己讨厌的副作用:div 出现在每个页面的顶部,直到被关闭(然后它停止出现)。开发人员模式弹出窗口首次出现时可以通过按 ESC 来关闭。无论哪种情况都很烦人!
    【解决方案14】:

    我在 Windows 上工作,我已经尝试了这里提供的很多东西作为答案,但弹出窗口不断禁用扩展,然后我尝试了以下步骤,现在它可以工作了:

    1. 进入chrome://extensions页面并点击Pack extension按钮并通过点击下图中显示的红色矩形浏览按钮选择您的扩展根目录。

    1. 选择根目录后点击下图中红圈显示的Pack extension按钮。

    1. 现在检查您选择的扩展名root directoryparent directory,2 个文件将创建[extension name].crx[extension name].pem

    2. 现在只需将 [extension name].crx 文件拖放到 chrome://extensions 页面上,它会要求使用添加应用对话框单击 Add app 并刷新它现在安装的页面。

    注意:在执行上述任何操作之前,请确保为扩展启用开发者模式。如果未启用,请在启用后刷新 chrome://extensions 页面。

    【讨论】:

    • 解压后的扩展适用于开发者模式警告。但是对于 crx,扩展总是被禁用。 google 要求扩展程序在网上商店发布并从那里安装。
    • Chrome 不允许用户安装打包的扩展并说,包无效:CRX_REQUIRED_PROOF_MISSING。
    • @HarshitJuneja 可能是您必须将扩展 ID 列入白名单,然后重新启动 chrome。
    【解决方案15】:

    现在,我们需要使用以下方法来处理它 -

    ChromeOptions chromeOptions = new ChromeOptions();
    chromeOptions.addArguments("chrome.switches", "--disable-extensions --disable-extensions-file-access-check --disable-extensions-http-throttling");
    

    除了--disable-extensions,我们还需要添加--disable-extensions-file-access-check(和/或)--disable-extensions-http-throttling镀铬开关。

    【讨论】:

      【解决方案16】:

      根据Antony Hatchkins的回答:

      禁用弹窗的official way好像是这样的:

      1. 打包您的扩展程序(chrome://extensions/,勾选“开发者模式”,点击“打包扩展程序...”)并通过将.crx 文件拖放到chrome://extensions 页面中进行安装。

        (由于扩展程序不是来自 Chrome 网上应用店,因此默认禁用。)

      然后对于 Windows:

      1. 在 Chrome 中,转到扩展页面 (chrome://extensions)
      2. 选中顶部的开发者模式复选框
      3. 向下滚动禁用扩展程序列表并记下要启用的扩展程序的 ID。例如,LogMeIn 是 ID:nmgnihglilniboicepgjclfiageofdfj
      4. 单击Start > Run,然后输入regedit <ENTER>
      5. HKLM\Software\Policies\Google\Chrome\ExtensionInstallWhitelist 键下(如果不存在,则创建它),为您希望使用顺序名称(索引)启用的每个扩展创建一个新字符串,例如1、2、...
      6. 以任意顺序输入扩展 ID 作为字符串值。例如,有一个字符串,名称为1,值为nmgnihglilniboicepgjclfiageofdfj
      7. 重启 Chrome

      就是这样!

      注意:当您更新列入白名单的扩展程序时,您不必执行相同的步骤,因为扩展程序的 ID 不会更改。

      【讨论】:

      • 拖放.crx文件只会弹出save as window,不会安装它。 Chrome 版本 80.0.3987.163。
      • 找不到边缘铬的注册表项
      • @xyz 拖放 .crx 文件会在版本 81.0.4044.122 中安装扩展。 @JinSnow 看Microsoft Edge - Policies - ExtensionInstallAllowlist
      【解决方案17】:

      这个问题非常古老,但当您搜索尝试禁用此弹出消息的方法时,这个问题仍然是 google 上的最高结果,因为扩展开发人员尚未将其扩展程序添加到 chrome 商店,无权访问由于他们的操作系统而导致的组策略,并且没有使用 chrome dev 构建。目前在这种情况下没有官方解决方案,所以我会在这里发布一个有点“hacky”的解决方案。

      这种方法让我们立即创建一个新窗口并关闭旧窗口。弹出窗口与原始窗口相关联,因此在正常使用情况下,弹出窗口在该窗口关闭后永远不会出现。

      这里最简单的解决方案是我们创建一个新窗口,并关闭所有不是我们刚刚在回调中创建的窗口的窗口:

      chrome.windows.create({
          type: 'normal',
          focused: true,
          state: 'maximized'
      }, function(window) {
          chrome.windows.getAll(function(windows) {
              for (var i = 0; i < windows.length; i++) {
                  if (windows[i].id != window.id) {
                      chrome.windows.remove(windows[i].id);
                  }
              }
          });
      });
      

      此外,我们可以检测此扩展的安装方式,并且仅在开发安装时才运行此代码(尽管最好从发布代码中完全删除)。首先,我们为 chrome.management.getSelf 调用创建回调函数,它允许我们检查扩展的安装类型,这基本上只是将上面的代码包装在 if 语句中:

      function suppress_dev_warning(info) {
          if (info.installType == "development") {
              chrome.windows.create({
                  type: 'normal',
                  focused: true,
                  state: 'maximized'
              }, function(window) {
                  chrome.windows.getAll(function(windows) {
                      for (var i = 0; i < windows.length; i++) {
                          if (windows[i].id != window.id) {
                              chrome.windows.remove(windows[i].id);
                          }
                      }
                  });
              });
          }
      }
      

      接下来我们使用我们所做的回调调用 chrome.management.getSelf:

      chrome.management.getSelf(suppress_dev_warning);
      

      这个方法有一些注意事项,即我们假设一个持久的背景页面,这意味着代码在第一次打开 chrome 时只运行一次。第二个问题是,如果我们从 chrome://extensions 页面重新加载/刷新扩展程序,它将关闭当前打开的所有窗口,并且根据我的经验,有时无论如何都会显示警告。这种特殊情况可以通过检查是否有任何选项卡对“chrome://extensions”打开并且如果打开则不执行来避免。

      【讨论】:

        【解决方案18】:

        还有一个替代方案,使用Chrome-Developer-Mode-Extension-Warning-Patcher:

        1. 从 Github 的 here 下载最新版本。
        2. 关闭 Chrome。
        3. 解压 zip 存档并以管理员身份运行 ChromeDevExtWarningPatcher.exe。
        4. 从刚刚打开的 GUI 中选择您的 Chrome 安装,然后点击 Patch 按钮:

        1. 在没有任何 DevMode 弹出窗口的情况下享受 Chrome!

        【讨论】:

        • 这是最好的解决方案。这甚至适用于便携式安装。
        【解决方案19】:

        你试过在 Github 上使用 Developer Mode Extension Patcher 吗?

        它会自动修补您的 Chrome/Chromium/Edge 浏览器并隐藏警告。

        【讨论】:

        【解决方案20】:

        我发现了一些可以加载用户打包的扩展并且运行良好的东西:

        您仍然需要为问题扩展详细打包它,但之后您可以关闭开发人员模式并通过此加载打包的 CRX。您不必处理签名或其他任何事情。

        https://chrome.google.com/webstore/detail/crosspilot/migomhggnppjdijnfkiimcpjgnhmnale?hl=en

        注意:我不是来自他们的团队,多年来我一直在寻找一个优雅的解决方案。

        【讨论】:

          猜你喜欢
          • 2018-05-25
          • 1970-01-01
          • 1970-01-01
          • 2014-05-30
          • 2015-07-29
          • 1970-01-01
          • 1970-01-01
          • 2020-05-09
          • 1970-01-01
          相关资源
          最近更新 更多