禁用 Chrome 中弹出的开发者模式扩展

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

这似乎是进攻性的扩展,但它没有意义,这是一个潜在的危险扩展给它使用的铬驱动器。

任何人已经找到了这个修复,因为我无法回滚到以前的版本或找到一个安装程序的旧版本回滚,这是对我的测试大肆破坏。

enter image description here

enter image description here

175786 次浏览

无法关闭,引用: “对不起,我们知道这很烦人,但你们这些恶意软件编写者...”

你唯一的选择是: 让你的自动化测试适应这种新的行为,或者上传这个冒犯性的脚本到 Chrome Web Store (这可以以一种“未列出”的方式完成)。

不幸的是,我不能自动设置为开发模式,因为宽度限制使用的浏览器在 iphone 模式。我已经找到了一个危险的工作区现在,安装开发通道版本的铬。它没有警告信息,但我肯定它会导致我更多的问题,从长远来看,当问题引入。希望还能给我几天时间找到解决办法。

在创建 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);

基于 Ruby 的 watir-webDriver 使用以下代码:

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

禁用扩展设置对我不起作用。相反,我使用 机器人类单击“取消”按钮。

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

二零一五年五月开始,Chrome 在 Windows 上的 Beta/dev/canary(参见第75-78行)总是显示这个警告。

  • 我刚刚使用 hiew32演示版本修补了 chrome.dll (dev channel,32-bit) : 运行它,切换到十六进制视图(输入键) ,搜索 扩展开发模式警告(F7) ,然后按 F6找到引用代码,转到附近的 INC EAX行,然后是 RETN,按 F3编辑,键入90而不是40,这将呈现为 NOP (no-op) ,保存(F9)。

  • @ Gsx 发现的简化方法,同样适用于64位的 Chrome dev:

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

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

我也有同样的问题,我试过以下方法:

  1. 打包未打包的扩展
  2. 关闭开发模式
  3. 从打包的扩展名中拖放.crx 文件
  4. 关闭 Chrome,然后再次打开。

有几点需要注意:

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

当我重新打开 Chrome 时,我看到一个弹出窗口告诉我新的打包扩展,所以我重新启动了 Chrome,看看它是否还会这样做,结果没有。

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

禁用弹出窗口的 正式的方式是这样的:

  1. 打包您的扩展: 转到 chrome://extensions,选中 Developer mode并单击 Pack extension

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

如果你现在重启 Chrome,你会看到一个“不支持扩展禁用”的弹出窗口。

那么对于 Windows7或 Windows8:

  1. 下载 Chrome 组策略模板 给你
  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. 检查 Developer Mode
  6. 向下滚动禁用扩展的列表,注意要启用的扩展的 ID。
  7. 单击 Start > Run,键入 gpedit.msc,然后按 enter
  8. User Configuration > Administrative Templates > Google Chrome > Extensions
  9. 双击 Configure extension installation whitelist策略
  10. 选择 Enabled,然后单击 Show
  11. 在列表中,输入您在步骤7中注意到的扩展的 ID
  12. 单击 OK并重新启动 Chrome。

就是这样!

编辑: 截至2018年7月,这种方法不再有效: 谷歌似乎已经停止遵守“白名单”。

编辑2: 截至2018年12月,这种方法在 Chrome Version 69.0.3497.100 (Official Build) (64-bit)中有效:

  1. chrome://extensions中临时启用 Developer mode

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

  3. 单击 Pack extension,找到并选择包含扩展文件的文件夹

  4. Pack extension。将在扩展名的根目录附近创建一个 .crx.pem文件。使用 .crx文件安装扩展名,并保证 .pem文件的安全。

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

弹出窗口应该消失了。

通过在 Python 中使用 selenium,您可以像下面这样禁用扩展来启动驱动程序:

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

弹出的“禁用开发人员模式扩展”将不会弹出。

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

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

我不确定这对人们来说是否还是个问题。然而,我通读了这篇文章和其他几篇文章,最终使用这段代码在 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/";

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

这就是目前设置 Chrome 策略的 正式的方式: Https://support.google.com/chrome/a/answer/187202?hl=en

Windows 和 Linux 模板以及公共策略 所有操作系统的文档可以在这里找到: Https://dl.google.com/dl/edgedl/chrome/policy/policy_templates.Zip (邮政编码档案 谷歌浏览器模板和文档)

视窗操作说明(附加说明) :

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

  • 从前面下载的“ policy _ templates.zip”(例如“ policy _ template. zip windows adm en-US chrome.adm”)中提取您选择的语言中的“ chrome.adm”。
  • 导航到 Start > Run: gpedit.msc。
  • 浏览本地电脑政策 > 电脑/用户配置 > 管理模板。
  • 右键单击“管理模板”,然后选择“添加/删除模板”。
  • 通过对话框添加“ chrome.adm”模板。
  • 完成后,经典管理模板(ADM)/Google/Google Chrome 文件夹将出现在管理模板下。
  • 无论你是在计算机配置或用户配置下添加模板,设置都会出现在两个地方,所以你可以在机器或用户级别配置 Chrome。

一旦您完成了这一步,请继续从 安东尼 · 哈奇金斯的回答的步骤5开始。在您添加了扩展 ID 之后,您可以通过打开 chrome://policy(搜索 ExtensionInstallWhitelist 扩展安装白名单)来检查该策略是否在 Chrome 中正常工作。

1)等待弹出气球出现。

2)打开新标签。

3)关闭新标签。弹出窗口将从原来的标签中消失。

一个小小的 Chrome 扩展可以自动完成以下步骤:

宣言 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
}
}

背景 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 时就看不到它了。

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

  1. 转到 Chrome://扩展名页面,单击 Pack extension按钮,点击下图中显示的红色矩形浏览按钮,选择您的根目录扩展。

browse root directory of extension

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

enter image description here

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

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

注意: 在做以上任何事情之前,请确保 为扩展启用开发人员模式。如果未启用此选项,请在启用之后刷新 chrome://扩展页面。

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

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铬开关。

基于 安东尼 · 哈奇金斯的回答:

禁用弹出窗口的 正式的方式看起来是这样的:

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

    (由于该扩展不是来自 ChromeWebStore,因此默认情况下将被禁用。)

然后是 Windows:

  1. 在 Chrome 中,进入扩展页面(Chrome://扩展名)
  2. 选中顶部的 Developer Mode 复选框
  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 不会更改。

这个问题已经很老了,但是当你搜索如何禁用这个弹出消息的时候,这个问题仍然是谷歌搜索结果的第一位,因为这个扩展开发者没有在 chrome 商店添加他们的扩展,因为他们的操作系统没有访问组策略,也没有使用 chrome 开发版本。目前在这种情况下还没有正式的解决方案,所以我将在这里发布一个有点“骇客”的解决方案。

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

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

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://扩展名”而不执行它们来避免这种特殊情况。

还有另一种解决方案,使用 Chrome-开发者-模式-扩展-警告-修补程序:

  1. 从 Github 下载 给你的最新版本。
  2. 关闭 Chrome。
  3. 解压缩压缩文件并运行 ChromeDevExtWarningPatcher.exe 作为管理人
  4. 从刚打开的 GUI 中选择你的 Chrome 安装,然后点击补丁按钮:

enter image description here

  1. 不需要任何 DevMode 弹出窗口就可以享受 Chrome!

你试过在 Github 上使用 开发模式扩展补丁程序吗?

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

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

你仍然必须为问题扩展打包它的细节,但在此之后,你可以关闭开发者模式,并通过这个加载打包的 CRX。你不需要签字什么的。

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

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