禁用Chrome中的开发者模式扩展程序

时间:2014-04-14 08:43:08

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

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

这似乎是令人反感的延伸,但对于我来说这是一个潜在危险的扩展并不合理,因为它是由chromedriver使用的。

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

enter image description here

enter image description here

20 个答案:

答案 0 :(得分:47)

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

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

    (如果您在此阶段尝试重新启动Chrome,则会禁用"不支持的扩展程序"弹出窗口)

  2. 然后是Win7 / 8:

    1. 从以下位置下载Chrome群组政策模板:
      http://dl.google.com/dl/edgedl/chrome/policy/policy_templates.zip
    2. [zip]\windows\admx\chrome.admx复制到 c:\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的ID 您要启用的扩展程序。例如,LogMeIn是ID:nmgnihglilniboicepgjclfiageofdfj
    7. 点击Start&gt; Run,然后输入gpedit.msc <ENTER>
    8. 展开User Configuration&gt; Administrative Templates&gt; Google Chrome&gt; Extensions
    9. 双击以打开Configure extension installation whitelist政策
    10. 选择Enabled,然后点击Show...
    11. 在列表中,输入您在步骤7中记下的扩展程序的ID(
    12. 点击OK并重新启动Chrome
    13. 那就是它!

      截至2018年7月,这种方法已不再适用:谷歌似乎已经停止尊重&#34;白名单&#34;

      编辑:截至10/16/2018,这种方法可行。 (Chrome版本69.0.3497.100(官方版本)(64位))

      1.暂时在chrome:// extensions /

      中启用开发人员模式

      2.使用&#34; Load unpacked&#34;卸载您安装的扩展程序(准确地说是导致弹出窗口的扩展名)。

      3.点击包扩展名并输入文件的根目录(将扩展文件放在单个文件夹/每个错误导致扩展名的一个文件夹中)如果您没有输入私人密钥文件,请不要输入私人密钥文件。拥有它。

      4.单击包扩展,将在扩展的根目录附近创建.crx和.pem文件。使用crx文件安装扩展程序并保持pem文件安全(如果删除它或出现错误,可以随时重新打包扩展名。)

      5.然后将已安装crx的扩展ID复制到白名单并重新启动Chrome。

      弹出窗口应该消失了。

答案 1 :(得分:35)

创建chrome驱动程序时,使用选项禁用它。 它的工作没有任何扩展。

使用以下代码段

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

答案 2 :(得分:21)

从Windows May 2015 Chrome beta/dev/canary开始(请参阅第75-78行)始终显示此警告。

  • 我刚刚使用hiew32演示版修补了chrome.dll(开发频道,32位):运行它,切换到十六进制视图(输入密钥),搜索 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。

答案 3 :(得分:8)

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

您唯一的选择是:根据这种新行为调整自动化测试,或将违规脚本上传到Chrome网上应用店(可以“不公开”方式完成)。

答案 4 :(得分:5)

还有另一种解决方案,请使用Chrome-Developer-Mode-Extension-Warning-Patcher

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

enter image description here

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

答案 5 :(得分:4)

(回复Antony Hatchkins)

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

  

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

Windows说明(附加说明):

  

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

     
      
  • Extract&#34; chrome.adm&#34;用你所选择的语言来自&#34; policy_templates.zip&#34;之前已下载(例如&#34; policy_templates.zip \ windows \ adm \ en-US \ chrome.adm&#34;)。
  •   
  • 导航至开始&gt;运行:gpedit.msc。
  •   
  • 导航至本地计算机政策&gt;计算机/ 用户配置&gt;管理模板。
  •   
  • 右键单击“管理模板”,然后选择“添加/删除模板”。
  •   
  • 添加&#34; chrome.adm&#34;模板通过对话框。
  •   
  • 完成后,经典管理模板(ADM)/ Google / Google Chrome文件夹将显示在管理模板下。
  •   
  • 无论您是在计算机配置还是用户配置下添加模板,设置都会显示在这两个位置,因此您可以在计算机或用户级别配置Chrome。
  •   

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

答案 6 :(得分:3)

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

  1. 打包解压缩的扩展程序
  2. 关闭开发者模式
  3. 从打包的扩展程序中拖放.crx文件
  4. 关闭Chrome,然后重新打开。
  5. 有几点需要注意:

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

    当我重新打开Chrome时,我收到了一个弹出窗口,告诉我有关新打包扩展程序的信息,因此我重新启动Chrome以查看是否会再次执行此操作,但事实并非如此。

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

答案 7 :(得分:2)

禁用扩展程序设置对我不起作用。相反,我使用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();
    }
  }
}

答案 8 :(得分:2)

基于 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. 的字符串
  8. 重新启动Chrome

就是这样!

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

答案 9 :(得分:1)

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时您将看不到它。

答案 10 :(得分:0)

我不确定这是否仍然是人们的问题。但是,我通读了这篇文章和其他几篇文章,并最终解决了这个问题,并且能够使用此代码使其在C#中运行。我从这篇文章中得到了所有内容,并且可能有一些帖子链接到这篇文章。

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

使用版本52.0.2743.116米的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/";

答案 11 :(得分:0)

我发现了一些可以加载用户打包的扩展程序并可以正常工作的东西:

对于问题扩展,您仍然必须对其进行详细打包,但是在此之后,您可以关闭开发人员模式并通过此方式加载打包的CRX。您不必处理签名或其他任何事情。

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

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

答案 12 :(得分:0)

您是否尝试过在Github上使用Developer Mode Extension Patcher

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

答案 13 :(得分:0)

这个问题非常古老,但是当您搜索尝试禁用此弹出消息的方法时,它仍然是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”打开并且不执行来避免这种特殊情况。

答案 14 :(得分:0)

我正在Windows上工作,并且我尝试了此处提供的许多答案,但是Popup不断禁用该扩展,然后我尝试了以下步骤,现在可以正常工作:

  1. 转到chrome://extensions页,然后单击Pack extension按钮,然后通过单击下图中显示的红色矩形浏览按钮来选择扩展的根目录。

browse root directory of extension

  1. 选择根目录后,单击下图中以红色圆圈显示的Pack extension按钮。

enter image description here

  1. 现在选中所选扩展名parent directory的{​​{1}},将创建两个文件root directory[extension name].crx

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

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

答案 15 :(得分:0)

对于使用WebdriverIO的任何人,您可以通过以下方式创建客户端来停用扩展程序:

@org.simpleframework.xml.Root(name="ValCurs", strict=false)
class ValCurs {

   @Attribute(name="ID") public String id;
   @Attribute(name="DateRange1") public String dateRange1;
   @Attribute(name="DateRange2") public String dateRange2;
   @Attribute public String name;

   @ElementList(inline = true)
   public List<Record> records;

   public ValCurs() {
      id = "";
      name = "";
      dateRange1 = "";
      dateRange2 = "";
      records = new ArrayList<Record>();

   }
}

@Root(name="Record")
class Record {
   @Attribute(name="Date") public String date;
   @Attribute(name="Id") public String id;
   @Element(name="Nominal") public String nominal;
   @Element(name="Value") public String value;

   public Record() {
      date = "";
      id = "";
      nominal = "";
      value = "";
   }
}

答案 16 :(得分:-1)

对于AngularJS和量角器:(此处未在其他任何地方解释)

修改conf.js,添加capabilities部分:

exports.config = {
    ...
    capabilities: {
        'browserName': 'chrome',
        'chromeOptions': {
            // Prevent warning about dev tools, which breaks some tests, in Windows at least.
            'args': ['--disable-extensions']
        }
    },

(基于这个答案:https://stackoverflow.com/a/33113360/694469关于某些相关但不同的内容)

答案 17 :(得分:-1)

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

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

答案 18 :(得分:-2)

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

答案 19 :(得分:-3)

在Python中使用selenium,启动驱动程序并禁用扩展名,如下所示:

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

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