3

我可以使用 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/")

但我无法摆脱与Google Chrome通知栏几乎相似的产品分析通知栏。

barve_product_analytics_notification_bar

谁能帮我吗?

4

2 回答 2

5

我从未使用过勇敢的浏览器,所以感谢您提出这个问题。

@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 且没有确认通知框的浏览器。

在此处输入图像描述

于 2022-01-03T02:16:19.690 回答
1

认为这已经不可能了,我真的不知道这背后的真正原因,但至少有两个原因。

首先是命令行开关--p3a-upload-enabled是可选的,并且仅在 Brave 之前可用beta-test
其次,它肯定与隐私GDPR内部政策有关,因为 P3A Brave 功能不会收集个人信息,但仍会在考虑软件质量的情况下收集遥测数据。

您将在他们的博客上获得有关此部分的更多信息:https ://brave.com/privacy-preserving-product-analytics-p3a/


作为参数,您可以查看这个commit,更准确地说是在L13L79-L80L212-L221 行,他们删除了 switch --p3a-upload-enabled


回到你的问题,如果你不需要运行chromedriver无配置文件,那么只需设置一个配置文件,一旦浏览器运行,你可以关闭通知栏,关闭状态将保存在配置文件中并在下次运行时,该栏将被隐藏。

以下代码将在 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

不幸的是,尽管没有错误,我还是无法让它工作——如果你这样做了,请联系我 :)

如果你问我是否可以在 WebDriver 实例化之后设置功能,那么我会再次说不,在 Selenium 的当前实现中,一旦 WebDriver 实例通过 DesiredCapabilities 类配置了我们的预期配置并初始化 WebDriver会话打开浏览器,我们无法更改功能运行时

于 2022-01-02T17:35:38.683 回答