ChromeDriver - 禁用 Selenium WebDriver 自动化中的开发者模式扩展弹出窗口

36
我遇到了以下问题: 运行自动化测试时,Chrome 浏览器会不断弹出 "禁用开发者模式扩展" 的警告提示框。

enter image description here

有没有办法去掉或禁用这个警告提示框?这对我来说是一个阻碍,因为它导致我的一些测试失败。

提前感谢!


1
那个弹出窗口不应该打开,除非你打开开发者工具,而你本来就不应该这样做。 - Arran
1
不,我只是在浏览几个页面进行一些自动化测试,然后弹出窗口出现了。 - elcharrua
在Chrome中前往chrome://extensions -> 列出了什么?请注意,这不是Selenium打开的Chrome,而是您自己的实例。 - Arran
在我的Chrome实例中,它显示没有安装任何扩展。 - elcharrua
1
如果您点击“了解更多”链接,它将显示是Chrome自动化扩展引起对话框出现的原因。自Chrome 34发布以来,我一直在尝试找到解决方法,但没有成功。 - Richard
显示剩余3条评论
11个回答

56

你尝试使用命令行参数禁用开发者扩展了吗?

尝试以下Selenium WebDriver Java代码:

System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-extensions");
driver = new ChromeDriver(options);

1
好的,这段代码确实可以工作,但一定要确保安装了最新的ChromeDriver! - Martin Erlic
1
似乎在最新版的ChromeDriver(2.29)中没有作用,而且--disable-extensions也没有列在Chrome / ChromeDriver文档中。 - Igor Brejc
昨天这个还能用,但今天Windows更新后就不能用了。 - Tim Pizey
请确保Chrome驱动程序版本与Chrome浏览器版本兼容,否则可能无法正常工作。 - Mandar

8

我不能禁用扩展程序,因为我正在开发和测试其中一个。

为了关闭这个弹窗,我采取以下措施:

  1. 我使用Selenium加载我的扩展程序的Chrome浏览器。
  2. 然后,我立即通过“SendKeys(Control-N)”方法创建一个新窗口。这将可预见地在新窗口中的3秒后弹出“停用开发人员模式扩展程序”的弹窗。
  3. 我无法编程方式判断它何时弹出(截图中不显示),所以我只好等待4秒钟。
  4. 接着,我通过“driver.Close()”关闭标签页(也会关闭这个新窗口)。 Chrome将其视为“取消”,关闭弹窗,保留原始窗口和标签页。

我认为这是必要的,因为弹窗会干扰正常的Selenium浏览器交互,例如我正在使用SendKeys来切换选项卡和窗口。


6
截至Chromedriver v2.33版本,避免此错误的正确方法是将 load-extension 传递给 chromeOptions 对象的 excludeSwitches 参数。下面的Java代码应该可以解决问题,尽管我没有测试过它,因为我正在运行Python:
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("excludeSwitches", Collections.singletonList("load-extension"));

正如其他人所指出的那样,罪魁祸首可能是Chrome Automation Extension,在Chromedriver启动Chrome时自动加载。
Chromedriver v2.33引入了新的开关以防止加载扩展程序:
更新了excludeSwitches功能,现在允许排除--load-extension开关。
我怀疑这个解决方案不需要你禁用所有扩展程序。你仍然可以手动加载其他扩展程序。

3

1
我也成功地使用ChromeDriver v2.23在Chrome v52.0.2743.116上去除了弹出窗口。 - Rick Johnson

2

我通过使用AutoIT解决了这个问题。

首先,您需要创建脚本。

closechromewarning.au3:

WinWaitActive("[CLASS:Chrome_WidgetWin_1]")
Send("{ESC}")
public void CloseChromeDialog()
{
    System.Threading.Thread.Sleep(5000);
    Process.Start(@".\closechromewarning.exe");
}

Sleep(4000) 能够起到作用,但是为了确保我将其提高到了 Sleep(5000)

调用 CloseChromeDialog()

if(browser == chrome) //pseudo code
    CloseChromeDialog();

谢谢,非常好用。虽然不是我想要的解决方案,但这是唯一可行的方法,直到谷歌修复Chrome问题。 - elcharrua
@elcharrua同意。我尝试了很多不同的方法来解决这个问题,但目前为止,只有这个方法有效。 - Richard

2

已在Chrome 54和Chromedriver 2.25中解决


0

pywinauto 可以使用

import pywinauto
window_title = "Disable Developer Mode Extensions"
app = pywinauto.Application().connect(name_re=window_title)
win_ext = app.window(name=window_title)
win_ext.close()

0
尝试在ChromeDriver实例上方添加setProperty。
System.setProperty("webdriver.chrome.driver","C:/[PATH]/chromedriver.exe");
driver = new ChromeDriver(capabilities);

0

我也遇到了这个问题。解决方法是,如果你正在使用Maven,只需添加:

-Dchrome.switches=--disable-extensions

它将禁用所有扩展程序,您将不会遇到这个问题。


0

我正在使用selenium Webdriver 2.53和chrome版本56.0.2924.87,我使用的chrome driver.exe版本是2.27。使用这个组合可以正常工作。

System.setProperty("webdriver.chrome.driver", "./utilities/chromedriver.exe");          
ChromeOptions options = new ChromeOptions();        
options.addArguments("--disable-extensions");           
DesiredCapabilities caps = new DesiredCapabilities().chrome();
caps.setCapability(ChromeOptions.CAPABILITY, options);
driver = new ChromeDriver(caps);

对于 Chrome 57.0.2987.133 和 chromedriver.exe 2.29,它对我来说不起作用。我的初始化代码如下:ChromeOptions options = new ChromeOptions(); options.addArguments("--disable-extensions"); options.setExperimentalOption("prefs", prefs); options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation")); DesiredCapabilities capabilities = DesiredCapabilities.chrome(); capabilities.setCapability(ChromeOptions.CAPABILITY, options); - GKalnytskyi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接