如何使用Python抑制Brave Browser中通过Selenium和ChromeDriver启动的产品分析通知栏

1rhkuytd  于 2023-09-28  发布在  Go
关注(0)|答案(3)|浏览(86)

我能够使用Selenium、ChromeDriver和Python启动Brave浏览器
代码试验:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

options = Options()
options.binary_location = r'C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe'
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
s = Service('C:\\BrowserDrivers\\chromedriver.exe')
driver = webdriver.Chrome(service=s, options=options)
driver.get("https://www.google.com/")

但我无法摆脱产品分析通知栏几乎类似于 * 谷歌Chrome* 通知栏。

有人能帮帮我吗?

o2rvlv0m

o2rvlv0m1#

我从来没有使用过勇敢浏览器,所以感谢你打开这个问题。
@flydev指出了勇敢的开关。

Brave代码库中pref_names.cc中的开关

#include "brave/components/p3a/pref_names.h"

namespace brave {

const char kP3AEnabled[] = "brave.p3a.enabled";
const char kP3ANoticeAcknowledged[] = "brave.p3a.notice_acknowledged";

}

再次引用Brave代码库:

// New users are shown the P3A notice via the welcome page.
registry->RegisterBooleanPref(kP3ANoticeAcknowledged, first_run);
void BraveConfirmP3AInfoBarDelegate::Create(
    infobars::ContentInfoBarManager* infobar_manager,
    PrefService* local_state) {
  
   // Don't show infobar if:
   // - P3A is disabled
   // - notice has already been acknowledged
   if (local_state) {
    if (!local_state->GetBoolean(brave::kP3AEnabled) ||
        local_state->GetBoolean(brave::kP3ANoticeAcknowledged)) {
      local_state->SetBoolean(brave::kP3ANoticeAcknowledged, true);
      return;
    }
  }

  infobar_manager->AddInfoBar(
      CreateConfirmInfoBar(std::unique_ptr<ConfirmInfoBarDelegate>(
          new BraveConfirmP3AInfoBarDelegate(local_state))));
}

void BraveConfirmP3AInfoBarDelegate::InfoBarDismissed() {
  // Mark notice as acknowledged when infobar is dismissed
  if (local_state_) {
    local_state_->SetBoolean(brave::kP3ANoticeAcknowledged, true);
  }
}

bool BraveConfirmP3AInfoBarDelegate::Cancel() {
  // OK button is "Disable"
  // Clicking should disable P3A
  if (local_state_) {
    local_state_->SetBoolean(brave::kP3AEnabled, false);
  }
  return true;
}

我尝试在selenium.webdriver.common.desired_capabilities.DesiredCapabilities中使用这些开关。

代码片段

from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

chrome_options = Options()
capabilities = DesiredCapabilities().CHROME

prefs = {
    'brave.p3a.enabled': True,
    'brave.p3a.notice_acknowledged': False
}

chrome_options.add_experimental_option('prefs', prefs)
capabilities.update(chrome_options.to_capabilities())

不幸的是,这并不奏效。当我查看Brave Browser的github帐户时,我发现了以下内容:

正如你所看到的,这是一个已知的问题。我将继续寻找使用DesiredCapabilities的方法。
同时,您可以将Brave配置文件传递给驱动程序,这将抑制确认通知。
代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.binary_location = '/Applications/Brave Browser.app/Contents/MacOS/Brave Browser'
chrome_options.add_argument("--start-maximized")
chrome_options.add_argument("--disable-infobars")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-popup-blocking")
chrome_options.add_argument("--disable-notifications")

chrome_options.add_argument("user-data-dir=/Users/username/Library/Application Support/BraveSoftware/Brave-Browser/Default")

chrome_options.add_argument("profile-directory=Profile 1")

# disable the banner "Chrome is being controlled by automated test software"
chrome_options.add_experimental_option("useAutomationExtension", False)
chrome_options.add_experimental_option("excludeSwitches", ['enable-automation'])

driver = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver', options=chrome_options)

driver.get('https://www.google.com')

sleep(60)
driver.close()
driver.quit()

在使用配置文件之前,您必须在Brave浏览器中禁用这些项目。

下面是配置文件1和无确认通知框的浏览器。

7z5jn7bk

7z5jn7bk2#

我 * 认为 * 这是不可能的了,我真的不知道这背后的真正原因,但至少有两个原因。
首先,命令行开关--p3a-upload-enabled是可选的,并且仅在Brave beta-test之前可用。
第二,它肯定与隐私GDPR内部政策有关,因为P3 A Brave功能不收集个人信息,但仍然收集遥测数据,并考虑到软件质量。
您将在他们的博客上获得有关此部分的更多信息:https://brave.com/privacy-preserving-product-analytics-p3a/
作为参数,你可以看看这个commit,更准确地说,在L13,L79-L 80和L212-L221行,他们删除了开关--p3a-upload-enabled
回到您的问题,如果您不需要运行chromedriver profileless,那么只需设置一个配置文件,一旦浏览器运行,您可以关闭通知栏,关闭状态将保存在配置文件中,下次运行时,该栏将被隐藏。
以下代码将在WebDriver示例化时创建配置文件:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

options = Options()

# set profile path
options.add_argument("user-data-dir=C:\\BrowserDrivers\\Test_Profile\\")
# optional, will be relative to `user-data-dir` switch value
options.add_argument("--profile-directory=test_data")

options.binary_location = r'C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe'
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
s = Service('C:\\BrowserDrivers\\chromedriver.exe')
driver = webdriver.Chrome(service=s, options=options)
driver.get("https://www.google.com/")

而且,
WebDriver运行后,在Profile文件夹中的Preferences文件中会有如下配置部分:

{
  "brave": {
    "p3a": {
      "enabled": "false",
      "notice_acknowledged": "true"
    }
  },
  "p3a": {
    "last_rotation_timestamp": "13285608876785125"
  }
}

解决方案可以是在WebDriver示例化上设置这些首选项:

# try to disable P3A via prefs
# ref: https://github.com/brave/brave-core/blob/master/components/p3a/pref_names.cc
chrome_prefs = {"brave":{"p3a":{"enabled":"false","notice_acknowledged":"true"},"widevine_opted_in":"false"},"p3a":{"last_rotation_timestamp":"13285608876785125"}}
options.experimental_options["prefs"] = chrome_prefs

不幸的是,我无法设法让它工作,尽管没有错误-如果你这样做,请ping我:)
如果你问我是否可以在WebDriver示例化后设置功能,那么我会再次说nop,就Selenium的当前实现而言,一旦WebDriver示例通过DesiredCapabilities类配置了我们想要的配置并初始化WebDriver会话以打开浏览器,我们就不能更改功能运行时

bhmjp9jg

bhmjp9jg3#

当我在Google上搜索:C# Selenium "Brave uses completely private product analytics to estimate the overall usage of certain features"
这个页面出现在结果的第一个,其余的结果似乎无关。
所以,我将在这里发布我对C#的答案,尽管这最初是一个Python问题。它也可以帮助Python程序员。我投了赞成票“生活是复杂的,因为它引导我走上了一条神奇的道路。”谢谢

  • 注意:由于此软件更新如此频繁,我还添加了它正在使用的确切版本和下载位置。
  • Brave浏览器版本:* 1.57.47 Chromium: 116.0.5845.96(Official Build)(64-bit)
  • 官方Chrome驱动下载:* https://googlechromelabs.github.io/chrome-for-testing
ChromeOptions chromeOptions = new ChromeOptions();

// ...

// Removes: "Brave is being controlled by automated test software."
chromeOptions.AddExcludedArgument("enable-automation");

// Removes: "Brave uses completely private product analytics to estimate the overall usage of certain features."
chromeOptions.AddLocalStatePreference("brave.p3a.notice_acknowledged", true);

return new ChromeDriver(chromeOptions);

希望能帮上忙。
编码愉快!!!

相关问题