Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I'm using the Python package Undetected Chromedriver as I need to be able to log into a Google account with the webdriver, and I want to pass the options {"credentials_enable_service": False, "profile.password_manager_enabled": False} to the driver so that it doesn't bring up the popup to save the password. I was trying to pass those options using:

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)

The argument --start-maximized works perfectly fine, and if I run the code with just that it starts maximised as intended. However, when adding the experimental options and running the code it returns the error:

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

So I thought that I would try to pass the arguments as Desired Capabilities instead, making the code:

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)

While this code runs and doesn't generate any errors, it also doesn't do anything at all. The password popup still shows up, and the driver doesn't even start maximised, despite the fact that the latter part worked as an option.

So my question is: how do I correctly pass Desired Capabilities to the Undetected Chromedriver? Or, alternatively: how do I correctly pass the Experimental Options to the Undetected Chromedriver?

Have you tried 'prefs', {'credentials_enable_service': False, 'profile': {'password_manager_enabled': False} – Jeni May 18, 2021 at 8:23 You should be able to set window size in driver... (in Java it's something like: driver.manage().window().setPosition... setSize... etc...) – pcalkins May 18, 2021 at 19:23 I think you should be setting it as an option. (You should be able to mix both options and capabilities btw... but set them separately.) You sure that values for those settings are bools? Many will have 0,1,2 instead. – pcalkins May 18, 2021 at 19:36 @Jeni I just tried that, but unfortunately it gives invalid sytanx no matter which way I try. – Foxes May 18, 2021 at 21:18

Undetected Chromedriver start webdriver service and Chrome as a normal browser with arguments, and after attaches a webdriver. Probably experimental preferents cannot be used on already running instance.

As workaround you can use Undetected Chromedriver patcher to modify the chromedriver and then use the it. But you need to check if the chrome is steal not detectable for your website. There're additional settings done for headless browser, so if you need headless check the source code.

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("")
                I just tried that but it still gives the unrecognized chrome option: prefs error as shown above, unfortunately.
– Foxes
                May 22, 2021 at 16:05

Try using Options() instead of ChromeOptions() with @Sers answer

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})
                Just tried this and it gives the error ImportError: cannot import name 'Options' from 'undetected_chromedriver.v2'
– Foxes
                May 23, 2021 at 20:14

Earlier this year, there were changes made to fix this issue and allow preferences:

https://github.com/ultrafunkamsterdam/undetected-chromedriver/issues/524

See https://github.com/ultrafunkamsterdam/undetected-chromedriver/commit/487969811851be6bcf6e3c55c8fc0d471940c6c3 for the commit.

That made important updates to https://github.com/ultrafunkamsterdam/undetected-chromedriver/blob/master/undetected_chromedriver/options.py in order to handle preferences.

Upgrade to a newer version to fix your issue.

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.