无法在 Chrome v76 中隐藏“Chrome 正在由自动化软件控制”信息栏
Posted
技术标签:
【中文标题】无法在 Chrome v76 中隐藏“Chrome 正在由自动化软件控制”信息栏【英文标题】:Unable to hide "Chrome is being controlled by automated software" infobar within Chrome v76 【发布时间】:2019-12-09 10:53:23 【问题描述】:将 Chrome 更新到版本 76 后,我无法弄清楚如何隐藏“Chrome 正在由自动化软件控制...”通知覆盖页面上的某些控件。
ChromeDriver 的最新稳定版本确实是 76.0.3809.68。 以下代码适用于 Chrome 75 和 ChromeDriver 74。
var options = new ChromeOptions();
options.AddArgument("--test-type");
options.AddArgument("--disable-extensions");
options.AddArguments("disable-infobars");
options.AddArguments("--disable-notifications");
options.AddArguments("enable-automation");
options.AddArguments("--disable-popup-blocking");
options.AddArguments("start-maximized");
var driver = new ChromeDriver(driverLocation, options, ScriptTimeout);
【问题讨论】:
这听起来像是 Chrome 的问题,而不是真正的 C# 【参考方案1】:截至 2019 年 8 月 1 日 - 您可以发送 excludeswitch - enable-automation 来隐藏消息。并禁用弹出“禁用开发者模式扩展”设置 使用自动化扩展=假。 Refer for useAutomationExtension
测试于:Windows 10 版本 76.0.3809.87(官方版本)(64 位) ChromeDriver 76.0.3809.68
--enable-automation :通知用户他们的浏览器正在被自动化测试控制Reference
"goog:chromeOptions":
"excludeSwitches": [ "enable-automation" ],
"useAutomationExtension": false
在 C# 中:
禁用弹出“禁用开发者模式扩展”和自动化信息栏消息。
options.AddExcludedArgument("enable-automation");
options.AddAdditionalCapability("useAutomationExtension", false);
在 JAVA 中:
options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
options.setExperimentalOption("useAutomationExtension", false);
在 Python 中:
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
在量角器中:
在 conf.js/conf.ts 中添加以下功能
capabilities:
'browserName': 'chrome',
"goog:chromeOptions":
"excludeSwitches": [ "enable-automation" ],
"useAutomationExtension": false
,
【讨论】:
@g-victor 确保删除 options.AddArguments("enable-automation");您的代码中的这一行也是如此 信息栏被隐藏。但问题无法隐藏“禁用 Chrome 中弹出的开发者模式扩展”弹出窗口。我使用了下一个选项: var options = new ChromeOptions(); options.AddArgument("--test-type"); options.AddArgument("--disable-extensions"); options.AddExcludedArgument("启用自动化"); options.AddArguments("开始最大化"); 作为解决方法添加 options.AddAdditionalOption("useAutomationExtension",false) useAutomationExtension = false 不起作用@RahulL。 “开发人员模式扩展......”仍然退出,但我需要使用我的扩展来自动化过程。我使用了这些选项: chromeOptions.AddArguments("disable-infobars"); chromeOptions.AddArgument("--disable-blink-features=BlockCredentialedSubresources"); chromeOptions.AddArgument("--disable-notifications"); chromeOptions.AddUserProfilePreference("enable_do_not_track", true); chromeOptions.AddAdditionalCapability("useAutomationExtension", false); chromeOptions.AddExcludedArgument("启用自动化"); @duong-khang chromeOptions.useAutomationExtension。仅适用于客户端启用或禁用“ChromeDriver 自动化扩展” 【参考方案2】:Chromium 团队早些时候引入了信息栏 Chrome is being controlled by automated test software
以通过 commit 禁用 Chrome 浏览器中的 Developer mode extension
弹出窗口。
根据Flakiness due to Chrome automation infobar (Chrome 57+) 的讨论,添加了 信息栏 以显示 如果会话由 Chrome 中的自动测试控制,观察到存在Chrome 自动化信息栏的 Chrome is being controlled by automated test software
间歇性地导致 click()
功能失败。在测试期间,当通过在chrome_launcher.cc
中传递disable-infobars
删除信息栏时,上述测试将按预期运行,没有任何问题。 gmanikpure@chromium.org确认罪魁祸首是changelog:
Add an infobar if a session is being controlled by an automated test.
This infobar is only displayed if the browser is launched with the --enable-automation switch. It also disables the developer mode extensions warning bubble.
TEST=launch with and without --enable-automation, and check for presence of automation infobar
据观察,在单击期间会出现信息栏动画,并且我们得到了不稳定的结果。因此,Chromium 团队需要以某种方式检测这种变化并重新计算位置。实际问题是,如果发生 Page.frameResized,我们可以使某些操作的结果无效并重试(例如获取元素位置),但还有其他操作可以修改页面,例如鼠标单击。鼠标单击(包括 mousemove、mousedown 和 mouseup 事件)可能会在中间发生 resize 事件。
据此,Chromium 团队通过这个commit 发布了一个修订:
Disable info bar animations during automated testing.
从那时起 Chrome 用户,开始使用禁用信息栏:
Java:
options.addArguments("disable-infobars");
Python:
options.add_argument("disable-infobars")
C#:
option.AddArguments("disable-infobars");
现在在讨论Chrome is being controlled by automated test software infobar doesn't gets suppressed despite using disable-infobars argument Chromium 团队成员triciac@chromium.org 明确提到:
从 v 76 开始,抑制信息栏的功能已从命令行选项移至 Chrome 的企业策略设置。
Release Notes 和Chrome Enterprise release notes 中已经提到更改如下
--disable-infobars is no longer supported
Chrome will no longer support the --disable-infobars flag, which was used to hide pop-up warnings
from Chrome Browser. To support automated testing, kiosks, and automation, the
CommandLineFlagSecurityWarningsEnabled policy was added to allow you to disable some security
warnings.
因此,从 Chrome v76.x 开始,--disable-infobars
标志被正式弃用。
结论
该策略不是在 ChromeDriver 或 Chrome 启动时设置的选项或功能,因为安全策略通常由您的公司 IT 部门管理。因此,disable-infobars
的使用已被弃用。
一个小技巧
--disable-infobars
标志仍然可以使用这 2(两个)ExperimentalOption 从 Chrome v76.x 中删除:
Excluding
enable-automation
的开关
将useAutomationExtension
设置为False
实现
以下是实现:
Java:
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");
options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
options.setExperimentalOption("useAutomationExtension", false);
WebDriver driver = new ChromeDriver(options);
driver.get("https://google.com");
Python:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
driver.get('https://www.google.co.in')
结尾
根据文章CommandLineFlagSecurityWarningsEnabled:
Enable security warnings for command-line flags
Supported on: Google Chrome (Linux, Mac, Windows) since version 76
Description: If disabled, prevents security warnings from appearing when Chrome is launched with some potentially dangerous command-line flags.
If enabled or unset, security warnings are displayed when some command-line flags are used to launch Chrome.
On Windows, this policy is only available on instances that are joined to a Microsoft Active Directory domain or Windows 10 Pro or Enterprise instances that are enrolled for device management.
【讨论】:
自 Chrome 79 版起不再支持 为什么有人要禁用 chrome 信息栏? @MasterJoe2 在某些情况下(包括我的),信息栏会导致 click() 函数失败。如果失败,某些测试可以使元素在 DOM 中但在视口中不可见。信息栏似乎将网站的视口向下推了一点,因此使其他元素无法点击【参考方案3】:这将在 C# 中工作:
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.AddArgument("--incognito");
chromeOptions.AddExcludedArgument("enable-automation");
chromeOptions.AddAdditionalCapability("useAutomationExtension", false);
【讨论】:
【参考方案4】:在 C# for Chrome v76 中隐藏“Chrome 正在由自动化测试软件控制”信息栏:
var chromeOptions = new ChromeOptions();
...
chromeOptions.AddAdditionalCapability("useAutomationExtension", false);
chromeOptions.AddExcludedArgument("enable-automation");
...
var driver = new ChromeDriver(ChromeDriverService.CreateDefaultService(), chromeOptions, commandTimeout);
【讨论】:
【参考方案5】:您可以使用--app=desired_address_without_brackets
标志,例如--app=https://google.com
。适用于 Chrome 80。
当然,只有当您的项目可以在 App 模式下启动并且您有一个可以在其中插入的页面链接时,它才有效。请参阅this answer of mine 了解更多信息。
您也可以使用--test-type
命令行标志,它也可以删除此类信息栏。
注意力! 在极少数情况下,它会导致奇怪的事情,比如静音页面声音!所以我不确定我是否应该首先推荐它。
【讨论】:
什么是应用模式? 不确定,不过你可以看到:auslogics.com/en/articles/google-chrome-in-application-mode【参考方案6】:在 Ruby 中,对于经常与 Capybara 一起使用的 selenium-webdriver gem,请使用 ::Selenium::WebDriver::Chrome::Options#add_option('excludeSwitches', ['enable-automation'])
。
例如:
Capybara.register_driver :selenium_chrome do |app|
browser_options = ::Selenium::WebDriver::Chrome::Options.new
browser_options.add_option 'excludeSwitches', ['enable-automation']
Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
end
【讨论】:
【参考方案7】:对我来说,Ruby 中的另一个选择是:
Capybara.register_driver :selenium_chrome do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome, options: chrome_options)
end
def chrome_options
options = Selenium::WebDriver::Chrome::Options.new
options.add_option 'excludeSwitches', ['enable-automation']
options.add_argument('incognito')
options.add_argument('disable-geolocation')
options.add_argument('ignore-certificate-errors')
options.add_argument('disable-popup-blocking')
options.add_argument('disable-web-security')
options.add_argument('--disable-infobars')
options.add_argument('disable-translate')
options
end
【讨论】:
【参考方案8】:显然您可以使用 CommandLineFlagSecurityWarningsEnabled chrome 策略 - https://www.chromium.org/administrators/policy-list-3#CommandLineFlagSecurityWarningsEnabled
在 Linux 上,我能够在 /etc/opt/chrome/policies/managed/managed_policies.json 中创建一个文件,其内容为:"CommandLineFlagSecurityWarningsEnabled": false
,这禁用了警告。
在 Windows 10 Pro 上,当我将 Chrome 组策略“启用命令行标志的安全警告”设置为禁用(请参阅 https://support.google.com/chrome/a/answer/187202)并检查 Software\Policies\Google\Chrome\CommandLineFlagSecurityWarningsEnabled 中的注册表时,其值为0x00000000 我无法禁用此警告。也许它会适合你?想知道其他人是否可以帮助阐明为什么它不能在 Windows 上运行
【讨论】:
以上是关于无法在 Chrome v76 中隐藏“Chrome 正在由自动化软件控制”信息栏的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 YouTube 链接没有在 Chrome 的 iframe 中自动播放? [复制]
frameset 在 Google Chrome 中无法隐藏左边栏解决方法!
Chrome 10.0.612 开发 Websocket 问题?