3

我正在使用 Python 包Undetected Chromedriver,因为我需要能够使用 webdriver 登录 Google 帐户,并且我想将选项传递{"credentials_enable_service": False, "profile.password_manager_enabled": False}给驱动程序,以便它不会弹出保存密码的弹出窗口。我试图通过这些选项使用:

import undetected_chromedriver.v2 as uc

uc_options = uc.ChromeOptions()
uc_options.add_argument("--start-maximized")
uc_options.add_experimental_option("prefs", {"credentials_enable_service": False, "profile.password_manager_enabled": False})

driver2 = uc.Chrome(options=uc_options)

这个论点--start-maximized工作得很好,如果我运行代码只是它开始按预期最大化。但是,当添加实验选项并运行代码时,它会返回错误:

selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: cannot parse capability: goog:chromeOptions
from invalid argument: unrecognized chrome option: prefs

所以我想我会尝试将参数作为 Desired Capabilities 传递,从而编写代码:

import undetected_chromedriver.v2 as uc

uc_options = uc.ChromeOptions()
uc_options.add_argument("--start-maximized")
uc_options.add_experimental_option("prefs", {"credentials_enable_service": False, "profile.password_manager_enabled": False})
uc_caps = uc_options.to_capabilities()

driver2 = uc.Chrome(desired_capabilities=uc_caps)

虽然这段代码运行并且不会产生任何错误,但它也根本没有做任何事情。密码弹出窗口仍然出现,并且驱动程序甚至没有开始最大化,尽管后者作为一个选项工作。

所以我的问题是:如何正确地将 Desired Capabilities 传递给 Undetected Chromedriver?或者,或者:如何正确地将实验选项传递给未检测到的 Chromedriver?

4

2 回答 2

1

尝试使用带有 @Sers 答案的 Options() 而不是 ChromeOptions()

from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_experimental_option(
"prefs", {"credentials_enable_service": False, "profile.password_manager_enabled": False})
于 2021-05-23T03:44:40.373 回答
1

Undetected Chromedriver使用参数启动 webdriver 服务和 Chrome 作为普通浏览器,然后附加 webdriver。可能实验首选项不能在已经运行的实例上使用。

作为解决方法,您可以使用Undetected Chromedriverpatcher 修改 chromedriver,然后使用它。但是您需要检查您的网站是否无法检测到 chrome。为无头浏览器完成了额外的设置,因此如果您需要无头浏览器,请检查源代码。

import undetected_chromedriver.v2 as uc
from selenium import webdriver

patcher = uc.Patcher()
patcher.auto()

options = webdriver.ChromeOptions()
options.add_argument("--start-maximized")
options.add_experimental_option(
    "prefs", {"credentials_enable_service": False, "profile.password_manager_enabled": False})

with webdriver.Chrome(options=options, executable_path=patcher.executable_path) as driver:
    driver.get("")
于 2021-05-22T13:49:38.483 回答